package ms.unicorn.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import ms.unicorn.services.EIstarGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalEIstarParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'situation'", "';'", "'include'", "'import'", "'evolution'", "'model'", "':'", "'on'", "'{'", "'}'", "'rule'", "'branch'", "'probability'", "'add'", "'+'", "'actor'", "','", "'goal'", "'remove'", "'-'", "'submodel'", "'*'", "'text'", "'.'", "'.*'", "':='", "'->'", "'owns'"
    };
    public static final int RULE_ID=5;
    public static final int RULE_STRING=4;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalEIstarParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g"; }



     	private EIstarGrammarAccess grammarAccess;
     	
        public InternalEIstarParser(TokenStream input, IAstFactory factory, EIstarGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("ms/unicorn/parser/antlr/internal/InternalEIstar.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Situation";	
       	}
       	
       	@Override
       	protected EIstarGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start entryRuleSituation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:78:1: entryRuleSituation returns [EObject current=null] : iv_ruleSituation= ruleSituation EOF ;
    public final EObject entryRuleSituation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSituation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:79:2: (iv_ruleSituation= ruleSituation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:80:2: iv_ruleSituation= ruleSituation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getSituationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleSituation_in_entryRuleSituation75);
            iv_ruleSituation=ruleSituation();
            _fsp--;

             current =iv_ruleSituation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSituation85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleSituation


    // $ANTLR start ruleSituation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:87:1: ruleSituation returns [EObject current=null] : ( 'situation' ( (lv_name_1_0= ruleQualifiedName ) ) ';' ( (lv_includes_3_0= ruleIncludeSituation ) )* ( (lv_imports_4_0= ruleImportNamespace ) )* ( (lv_children_5_0= ruleModel ) )* ) ;
    public final EObject ruleSituation() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_name_1_0 = null;

        EObject lv_includes_3_0 = null;

        EObject lv_imports_4_0 = null;

        EObject lv_children_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:92:6: ( ( 'situation' ( (lv_name_1_0= ruleQualifiedName ) ) ';' ( (lv_includes_3_0= ruleIncludeSituation ) )* ( (lv_imports_4_0= ruleImportNamespace ) )* ( (lv_children_5_0= ruleModel ) )* ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:93:1: ( 'situation' ( (lv_name_1_0= ruleQualifiedName ) ) ';' ( (lv_includes_3_0= ruleIncludeSituation ) )* ( (lv_imports_4_0= ruleImportNamespace ) )* ( (lv_children_5_0= ruleModel ) )* )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:93:1: ( 'situation' ( (lv_name_1_0= ruleQualifiedName ) ) ';' ( (lv_includes_3_0= ruleIncludeSituation ) )* ( (lv_imports_4_0= ruleImportNamespace ) )* ( (lv_children_5_0= ruleModel ) )* )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:93:3: 'situation' ( (lv_name_1_0= ruleQualifiedName ) ) ';' ( (lv_includes_3_0= ruleIncludeSituation ) )* ( (lv_imports_4_0= ruleImportNamespace ) )* ( (lv_children_5_0= ruleModel ) )*
            {
            match(input,11,FollowSets000.FOLLOW_11_in_ruleSituation120); 

                    createLeafNode(grammarAccess.getSituationAccess().getSituationKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:97:1: ( (lv_name_1_0= ruleQualifiedName ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:98:1: (lv_name_1_0= ruleQualifiedName )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:98:1: (lv_name_1_0= ruleQualifiedName )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:99:3: lv_name_1_0= ruleQualifiedName
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getSituationAccess().getNameQualifiedNameParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_ruleSituation141);
            lv_name_1_0=ruleQualifiedName();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getSituationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"QualifiedName", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_ruleSituation151); 

                    createLeafNode(grammarAccess.getSituationAccess().getSemicolonKeyword_2(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:125:1: ( (lv_includes_3_0= ruleIncludeSituation ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==13) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:126:1: (lv_includes_3_0= ruleIncludeSituation )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:126:1: (lv_includes_3_0= ruleIncludeSituation )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:127:3: lv_includes_3_0= ruleIncludeSituation
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getSituationAccess().getIncludesIncludeSituationParserRuleCall_3_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleIncludeSituation_in_ruleSituation172);
            	    lv_includes_3_0=ruleIncludeSituation();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getSituationRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"includes",
            	    	        		lv_includes_3_0, 
            	    	        		"IncludeSituation", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:149:3: ( (lv_imports_4_0= ruleImportNamespace ) )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==14) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:150:1: (lv_imports_4_0= ruleImportNamespace )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:150:1: (lv_imports_4_0= ruleImportNamespace )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:151:3: lv_imports_4_0= ruleImportNamespace
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getSituationAccess().getImportsImportNamespaceParserRuleCall_4_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleImportNamespace_in_ruleSituation194);
            	    lv_imports_4_0=ruleImportNamespace();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getSituationRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"imports",
            	    	        		lv_imports_4_0, 
            	    	        		"ImportNamespace", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:173:3: ( (lv_children_5_0= ruleModel ) )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( ((LA3_0>=15 && LA3_0<=16)||LA3_0==31) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:174:1: (lv_children_5_0= ruleModel )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:174:1: (lv_children_5_0= ruleModel )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:175:3: lv_children_5_0= ruleModel
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getSituationAccess().getChildrenModelParserRuleCall_5_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleModel_in_ruleSituation216);
            	    lv_children_5_0=ruleModel();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getSituationRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_5_0, 
            	    	        		"Model", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSituation


    // $ANTLR start entryRuleModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:205:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
    public final EObject entryRuleModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModel = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:206:2: (iv_ruleModel= ruleModel EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:207:2: iv_ruleModel= ruleModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getModelRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleModel_in_entryRuleModel253);
            iv_ruleModel=ruleModel();
            _fsp--;

             current =iv_ruleModel; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleModel263); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleModel


    // $ANTLR start ruleModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:214:1: ruleModel returns [EObject current=null] : (this_RequirementModel_0= ruleRequirementModel | this_EvolutionModel_1= ruleEvolutionModel ) ;
    public final EObject ruleModel() throws RecognitionException {
        EObject current = null;

        EObject this_RequirementModel_0 = null;

        EObject this_EvolutionModel_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:219:6: ( (this_RequirementModel_0= ruleRequirementModel | this_EvolutionModel_1= ruleEvolutionModel ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:220:1: (this_RequirementModel_0= ruleRequirementModel | this_EvolutionModel_1= ruleEvolutionModel )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:220:1: (this_RequirementModel_0= ruleRequirementModel | this_EvolutionModel_1= ruleEvolutionModel )
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==16||LA4_0==31) ) {
                alt4=1;
            }
            else if ( (LA4_0==15) ) {
                alt4=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("220:1: (this_RequirementModel_0= ruleRequirementModel | this_EvolutionModel_1= ruleEvolutionModel )", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:221:5: this_RequirementModel_0= ruleRequirementModel
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getModelAccess().getRequirementModelParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleRequirementModel_in_ruleModel310);
                    this_RequirementModel_0=ruleRequirementModel();
                    _fsp--;

                     
                            current = this_RequirementModel_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:231:5: this_EvolutionModel_1= ruleEvolutionModel
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getModelAccess().getEvolutionModelParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleEvolutionModel_in_ruleModel337);
                    this_EvolutionModel_1=ruleEvolutionModel();
                    _fsp--;

                     
                            current = this_EvolutionModel_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleModel


    // $ANTLR start entryRuleIncludeSituation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:247:1: entryRuleIncludeSituation returns [EObject current=null] : iv_ruleIncludeSituation= ruleIncludeSituation EOF ;
    public final EObject entryRuleIncludeSituation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleIncludeSituation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:248:2: (iv_ruleIncludeSituation= ruleIncludeSituation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:249:2: iv_ruleIncludeSituation= ruleIncludeSituation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getIncludeSituationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleIncludeSituation_in_entryRuleIncludeSituation372);
            iv_ruleIncludeSituation=ruleIncludeSituation();
            _fsp--;

             current =iv_ruleIncludeSituation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleIncludeSituation382); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleIncludeSituation


    // $ANTLR start ruleIncludeSituation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:256:1: ruleIncludeSituation returns [EObject current=null] : ( 'include' ( (lv_importURI_1_0= RULE_STRING ) ) ';' ) ;
    public final EObject ruleIncludeSituation() throws RecognitionException {
        EObject current = null;

        Token lv_importURI_1_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:261:6: ( ( 'include' ( (lv_importURI_1_0= RULE_STRING ) ) ';' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:262:1: ( 'include' ( (lv_importURI_1_0= RULE_STRING ) ) ';' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:262:1: ( 'include' ( (lv_importURI_1_0= RULE_STRING ) ) ';' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:262:3: 'include' ( (lv_importURI_1_0= RULE_STRING ) ) ';'
            {
            match(input,13,FollowSets000.FOLLOW_13_in_ruleIncludeSituation417); 

                    createLeafNode(grammarAccess.getIncludeSituationAccess().getIncludeKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:266:1: ( (lv_importURI_1_0= RULE_STRING ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:267:1: (lv_importURI_1_0= RULE_STRING )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:267:1: (lv_importURI_1_0= RULE_STRING )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:268:3: lv_importURI_1_0= RULE_STRING
            {
            lv_importURI_1_0=(Token)input.LT(1);
            match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleIncludeSituation434); 

            			createLeafNode(grammarAccess.getIncludeSituationAccess().getImportURISTRINGTerminalRuleCall_1_0(), "importURI"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getIncludeSituationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"importURI",
            	        		lv_importURI_1_0, 
            	        		"STRING", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_ruleIncludeSituation449); 

                    createLeafNode(grammarAccess.getIncludeSituationAccess().getSemicolonKeyword_2(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleIncludeSituation


    // $ANTLR start entryRuleImportNamespace
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:302:1: entryRuleImportNamespace returns [EObject current=null] : iv_ruleImportNamespace= ruleImportNamespace EOF ;
    public final EObject entryRuleImportNamespace() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleImportNamespace = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:303:2: (iv_ruleImportNamespace= ruleImportNamespace EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:304:2: iv_ruleImportNamespace= ruleImportNamespace EOF
            {
             currentNode = createCompositeNode(grammarAccess.getImportNamespaceRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleImportNamespace_in_entryRuleImportNamespace485);
            iv_ruleImportNamespace=ruleImportNamespace();
            _fsp--;

             current =iv_ruleImportNamespace; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleImportNamespace495); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleImportNamespace


    // $ANTLR start ruleImportNamespace
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:311:1: ruleImportNamespace returns [EObject current=null] : ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' ) ;
    public final EObject ruleImportNamespace() throws RecognitionException {
        EObject current = null;

        AntlrDatatypeRuleToken lv_importedNamespace_1_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:316:6: ( ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:317:1: ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:317:1: ( 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:317:3: 'import' ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) ) ';'
            {
            match(input,14,FollowSets000.FOLLOW_14_in_ruleImportNamespace530); 

                    createLeafNode(grammarAccess.getImportNamespaceAccess().getImportKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:321:1: ( (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:322:1: (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:322:1: (lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:323:3: lv_importedNamespace_1_0= ruleQualifiedNameWithWildCard
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getImportNamespaceAccess().getImportedNamespaceQualifiedNameWithWildCardParserRuleCall_1_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedNameWithWildCard_in_ruleImportNamespace551);
            lv_importedNamespace_1_0=ruleQualifiedNameWithWildCard();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getImportNamespaceRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"importedNamespace",
            	        		lv_importedNamespace_1_0, 
            	        		"QualifiedNameWithWildCard", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,12,FollowSets000.FOLLOW_12_in_ruleImportNamespace561); 

                    createLeafNode(grammarAccess.getImportNamespaceAccess().getSemicolonKeyword_2(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleImportNamespace


    // $ANTLR start entryRuleEvolutionModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:357:1: entryRuleEvolutionModel returns [EObject current=null] : iv_ruleEvolutionModel= ruleEvolutionModel EOF ;
    public final EObject entryRuleEvolutionModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvolutionModel = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:358:2: (iv_ruleEvolutionModel= ruleEvolutionModel EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:359:2: iv_ruleEvolutionModel= ruleEvolutionModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEvolutionModelRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEvolutionModel_in_entryRuleEvolutionModel597);
            iv_ruleEvolutionModel=ruleEvolutionModel();
            _fsp--;

             current =iv_ruleEvolutionModel; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEvolutionModel607); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEvolutionModel


    // $ANTLR start ruleEvolutionModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:366:1: ruleEvolutionModel returns [EObject current=null] : ( 'evolution' 'model' ( (lv_name_2_0= RULE_ID ) ) ( ':' ( (lv_text_4_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_children_8_0= ruleEvolutionRule ) )* '}' ) ;
    public final EObject ruleEvolutionModel() throws RecognitionException {
        EObject current = null;

        Token lv_name_2_0=null;
        Token lv_text_4_0=null;
        EObject lv_children_8_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:371:6: ( ( 'evolution' 'model' ( (lv_name_2_0= RULE_ID ) ) ( ':' ( (lv_text_4_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_children_8_0= ruleEvolutionRule ) )* '}' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:372:1: ( 'evolution' 'model' ( (lv_name_2_0= RULE_ID ) ) ( ':' ( (lv_text_4_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_children_8_0= ruleEvolutionRule ) )* '}' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:372:1: ( 'evolution' 'model' ( (lv_name_2_0= RULE_ID ) ) ( ':' ( (lv_text_4_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_children_8_0= ruleEvolutionRule ) )* '}' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:372:3: 'evolution' 'model' ( (lv_name_2_0= RULE_ID ) ) ( ':' ( (lv_text_4_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_children_8_0= ruleEvolutionRule ) )* '}'
            {
            match(input,15,FollowSets000.FOLLOW_15_in_ruleEvolutionModel642); 

                    createLeafNode(grammarAccess.getEvolutionModelAccess().getEvolutionKeyword_0(), null); 
                
            match(input,16,FollowSets000.FOLLOW_16_in_ruleEvolutionModel652); 

                    createLeafNode(grammarAccess.getEvolutionModelAccess().getModelKeyword_1(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:380:1: ( (lv_name_2_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:381:1: (lv_name_2_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:381:1: (lv_name_2_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:382:3: lv_name_2_0= RULE_ID
            {
            lv_name_2_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEvolutionModel669); 

            			createLeafNode(grammarAccess.getEvolutionModelAccess().getNameIDTerminalRuleCall_2_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEvolutionModelRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_2_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:404:2: ( ':' ( (lv_text_4_0= RULE_STRING ) ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==17) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:404:4: ':' ( (lv_text_4_0= RULE_STRING ) )
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleEvolutionModel685); 

                            createLeafNode(grammarAccess.getEvolutionModelAccess().getColonKeyword_3_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:408:1: ( (lv_text_4_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:409:1: (lv_text_4_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:409:1: (lv_text_4_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:410:3: lv_text_4_0= RULE_STRING
                    {
                    lv_text_4_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEvolutionModel702); 

                    			createLeafNode(grammarAccess.getEvolutionModelAccess().getTextSTRINGTerminalRuleCall_3_1_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionModelRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_4_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,18,FollowSets000.FOLLOW_18_in_ruleEvolutionModel719); 

                    createLeafNode(grammarAccess.getEvolutionModelAccess().getOnKeyword_4(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:436:1: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:437:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:437:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:438:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getEvolutionModelRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEvolutionModel737); 

            		createLeafNode(grammarAccess.getEvolutionModelAccess().getModelModelCrossReference_5_0(), "model"); 
            	

            }


            }

            match(input,19,FollowSets000.FOLLOW_19_in_ruleEvolutionModel747); 

                    createLeafNode(grammarAccess.getEvolutionModelAccess().getLeftCurlyBracketKeyword_6(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:454:1: ( (lv_children_8_0= ruleEvolutionRule ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==21) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:455:1: (lv_children_8_0= ruleEvolutionRule )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:455:1: (lv_children_8_0= ruleEvolutionRule )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:456:3: lv_children_8_0= ruleEvolutionRule
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionModelAccess().getChildrenEvolutionRuleParserRuleCall_7_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleEvolutionRule_in_ruleEvolutionModel768);
            	    lv_children_8_0=ruleEvolutionRule();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getEvolutionModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_8_0, 
            	    	        		"EvolutionRule", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            match(input,20,FollowSets000.FOLLOW_20_in_ruleEvolutionModel779); 

                    createLeafNode(grammarAccess.getEvolutionModelAccess().getRightCurlyBracketKeyword_8(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEvolutionModel


    // $ANTLR start entryRuleEvolutionRule
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:490:1: entryRuleEvolutionRule returns [EObject current=null] : iv_ruleEvolutionRule= ruleEvolutionRule EOF ;
    public final EObject entryRuleEvolutionRule() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvolutionRule = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:491:2: (iv_ruleEvolutionRule= ruleEvolutionRule EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:492:2: iv_ruleEvolutionRule= ruleEvolutionRule EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEvolutionRuleRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEvolutionRule_in_entryRuleEvolutionRule815);
            iv_ruleEvolutionRule=ruleEvolutionRule();
            _fsp--;

             current =iv_ruleEvolutionRule; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEvolutionRule825); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEvolutionRule


    // $ANTLR start ruleEvolutionRule
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:499:1: ruleEvolutionRule returns [EObject current=null] : ( 'rule' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( ruleQualifiedName ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( (lv_children_8_0= ruleEvolutionBranch ) )* '}' ) ;
    public final EObject ruleEvolutionRule() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token lv_text_3_0=null;
        EObject lv_imports_7_0 = null;

        EObject lv_children_8_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:504:6: ( ( 'rule' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( ruleQualifiedName ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( (lv_children_8_0= ruleEvolutionBranch ) )* '}' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:505:1: ( 'rule' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( ruleQualifiedName ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( (lv_children_8_0= ruleEvolutionBranch ) )* '}' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:505:1: ( 'rule' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( ruleQualifiedName ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( (lv_children_8_0= ruleEvolutionBranch ) )* '}' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:505:3: 'rule' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( ruleQualifiedName ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( (lv_children_8_0= ruleEvolutionBranch ) )* '}'
            {
            match(input,21,FollowSets000.FOLLOW_21_in_ruleEvolutionRule860); 

                    createLeafNode(grammarAccess.getEvolutionRuleAccess().getRuleKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:509:1: ( (lv_name_1_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:510:1: (lv_name_1_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:510:1: (lv_name_1_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:511:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEvolutionRule877); 

            			createLeafNode(grammarAccess.getEvolutionRuleAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEvolutionRuleRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:533:2: ( ':' ( (lv_text_3_0= RULE_STRING ) ) )?
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==17) ) {
                alt7=1;
            }
            switch (alt7) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:533:4: ':' ( (lv_text_3_0= RULE_STRING ) )
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleEvolutionRule893); 

                            createLeafNode(grammarAccess.getEvolutionRuleAccess().getColonKeyword_2_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:537:1: ( (lv_text_3_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:538:1: (lv_text_3_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:538:1: (lv_text_3_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:539:3: lv_text_3_0= RULE_STRING
                    {
                    lv_text_3_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEvolutionRule910); 

                    			createLeafNode(grammarAccess.getEvolutionRuleAccess().getTextSTRINGTerminalRuleCall_2_1_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionRuleRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_3_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,18,FollowSets000.FOLLOW_18_in_ruleEvolutionRule927); 

                    createLeafNode(grammarAccess.getEvolutionRuleAccess().getOnKeyword_3(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:565:1: ( ( ruleQualifiedName ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:566:1: ( ruleQualifiedName )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:566:1: ( ruleQualifiedName )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:567:3: ruleQualifiedName
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getEvolutionRuleRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
             
            	        currentNode=createCompositeNode(grammarAccess.getEvolutionRuleAccess().getOriginalModelCrossReference_4_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_ruleEvolutionRule950);
            ruleQualifiedName();
            _fsp--;

             
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            match(input,19,FollowSets000.FOLLOW_19_in_ruleEvolutionRule960); 

                    createLeafNode(grammarAccess.getEvolutionRuleAccess().getLeftCurlyBracketKeyword_5(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:585:1: ( (lv_imports_7_0= ruleImportNamespace ) )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==14) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:586:1: (lv_imports_7_0= ruleImportNamespace )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:586:1: (lv_imports_7_0= ruleImportNamespace )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:587:3: lv_imports_7_0= ruleImportNamespace
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionRuleAccess().getImportsImportNamespaceParserRuleCall_6_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleImportNamespace_in_ruleEvolutionRule981);
            	    lv_imports_7_0=ruleImportNamespace();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getEvolutionRuleRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"imports",
            	    	        		lv_imports_7_0, 
            	    	        		"ImportNamespace", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:609:3: ( (lv_children_8_0= ruleEvolutionBranch ) )*
            loop9:
            do {
                int alt9=2;
                int LA9_0 = input.LA(1);

                if ( (LA9_0==22) ) {
                    alt9=1;
                }


                switch (alt9) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:610:1: (lv_children_8_0= ruleEvolutionBranch )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:610:1: (lv_children_8_0= ruleEvolutionBranch )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:611:3: lv_children_8_0= ruleEvolutionBranch
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionRuleAccess().getChildrenEvolutionBranchParserRuleCall_7_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleEvolutionBranch_in_ruleEvolutionRule1003);
            	    lv_children_8_0=ruleEvolutionBranch();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getEvolutionRuleRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_8_0, 
            	    	        		"EvolutionBranch", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop9;
                }
            } while (true);

            match(input,20,FollowSets000.FOLLOW_20_in_ruleEvolutionRule1014); 

                    createLeafNode(grammarAccess.getEvolutionRuleAccess().getRightCurlyBracketKeyword_8(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEvolutionRule


    // $ANTLR start entryRuleEvolutionBranch
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:645:1: entryRuleEvolutionBranch returns [EObject current=null] : iv_ruleEvolutionBranch= ruleEvolutionBranch EOF ;
    public final EObject entryRuleEvolutionBranch() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvolutionBranch = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:646:2: (iv_ruleEvolutionBranch= ruleEvolutionBranch EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:647:2: iv_ruleEvolutionBranch= ruleEvolutionBranch EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEvolutionBranchRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEvolutionBranch_in_entryRuleEvolutionBranch1050);
            iv_ruleEvolutionBranch=ruleEvolutionBranch();
            _fsp--;

             current =iv_ruleEvolutionBranch; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEvolutionBranch1060); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEvolutionBranch


    // $ANTLR start ruleEvolutionBranch
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:654:1: ruleEvolutionBranch returns [EObject current=null] : ( 'branch' ( (lv_name_1_0= RULE_ID ) ) 'probability' ( (lv_probability_3_0= RULE_INT ) ) '{' ( (lv_children_5_0= ruleEvolutionOperation ) )* '}' ) ;
    public final EObject ruleEvolutionBranch() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token lv_probability_3_0=null;
        EObject lv_children_5_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:659:6: ( ( 'branch' ( (lv_name_1_0= RULE_ID ) ) 'probability' ( (lv_probability_3_0= RULE_INT ) ) '{' ( (lv_children_5_0= ruleEvolutionOperation ) )* '}' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:660:1: ( 'branch' ( (lv_name_1_0= RULE_ID ) ) 'probability' ( (lv_probability_3_0= RULE_INT ) ) '{' ( (lv_children_5_0= ruleEvolutionOperation ) )* '}' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:660:1: ( 'branch' ( (lv_name_1_0= RULE_ID ) ) 'probability' ( (lv_probability_3_0= RULE_INT ) ) '{' ( (lv_children_5_0= ruleEvolutionOperation ) )* '}' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:660:3: 'branch' ( (lv_name_1_0= RULE_ID ) ) 'probability' ( (lv_probability_3_0= RULE_INT ) ) '{' ( (lv_children_5_0= ruleEvolutionOperation ) )* '}'
            {
            match(input,22,FollowSets000.FOLLOW_22_in_ruleEvolutionBranch1095); 

                    createLeafNode(grammarAccess.getEvolutionBranchAccess().getBranchKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:664:1: ( (lv_name_1_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:665:1: (lv_name_1_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:665:1: (lv_name_1_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:666:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEvolutionBranch1112); 

            			createLeafNode(grammarAccess.getEvolutionBranchAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEvolutionBranchRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,23,FollowSets000.FOLLOW_23_in_ruleEvolutionBranch1127); 

                    createLeafNode(grammarAccess.getEvolutionBranchAccess().getProbabilityKeyword_2(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:692:1: ( (lv_probability_3_0= RULE_INT ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:693:1: (lv_probability_3_0= RULE_INT )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:693:1: (lv_probability_3_0= RULE_INT )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:694:3: lv_probability_3_0= RULE_INT
            {
            lv_probability_3_0=(Token)input.LT(1);
            match(input,RULE_INT,FollowSets000.FOLLOW_RULE_INT_in_ruleEvolutionBranch1144); 

            			createLeafNode(grammarAccess.getEvolutionBranchAccess().getProbabilityINTTerminalRuleCall_3_0(), "probability"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getEvolutionBranchRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"probability",
            	        		lv_probability_3_0, 
            	        		"INT", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            match(input,19,FollowSets000.FOLLOW_19_in_ruleEvolutionBranch1159); 

                    createLeafNode(grammarAccess.getEvolutionBranchAccess().getLeftCurlyBracketKeyword_4(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:720:1: ( (lv_children_5_0= ruleEvolutionOperation ) )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( ((LA10_0>=24 && LA10_0<=25)||(LA10_0>=29 && LA10_0<=30)) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:721:1: (lv_children_5_0= ruleEvolutionOperation )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:721:1: (lv_children_5_0= ruleEvolutionOperation )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:722:3: lv_children_5_0= ruleEvolutionOperation
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionBranchAccess().getChildrenEvolutionOperationParserRuleCall_5_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleEvolutionOperation_in_ruleEvolutionBranch1180);
            	    lv_children_5_0=ruleEvolutionOperation();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getEvolutionBranchRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_5_0, 
            	    	        		"EvolutionOperation", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop10;
                }
            } while (true);

            match(input,20,FollowSets000.FOLLOW_20_in_ruleEvolutionBranch1191); 

                    createLeafNode(grammarAccess.getEvolutionBranchAccess().getRightCurlyBracketKeyword_6(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEvolutionBranch


    // $ANTLR start entryRuleEvolutionOperation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:756:1: entryRuleEvolutionOperation returns [EObject current=null] : iv_ruleEvolutionOperation= ruleEvolutionOperation EOF ;
    public final EObject entryRuleEvolutionOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvolutionOperation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:757:2: (iv_ruleEvolutionOperation= ruleEvolutionOperation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:758:2: iv_ruleEvolutionOperation= ruleEvolutionOperation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEvolutionOperationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEvolutionOperation_in_entryRuleEvolutionOperation1227);
            iv_ruleEvolutionOperation=ruleEvolutionOperation();
            _fsp--;

             current =iv_ruleEvolutionOperation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEvolutionOperation1237); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEvolutionOperation


    // $ANTLR start ruleEvolutionOperation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:765:1: ruleEvolutionOperation returns [EObject current=null] : ( (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation ) ';' ) ;
    public final EObject ruleEvolutionOperation() throws RecognitionException {
        EObject current = null;

        EObject this_EvolutionAddOperation_0 = null;

        EObject this_EvolutionRemoveOperation_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:770:6: ( ( (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation ) ';' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:771:1: ( (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation ) ';' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:771:1: ( (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation ) ';' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:771:2: (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation ) ';'
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:771:2: (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation )
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( ((LA11_0>=24 && LA11_0<=25)) ) {
                alt11=1;
            }
            else if ( ((LA11_0>=29 && LA11_0<=30)) ) {
                alt11=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("771:2: (this_EvolutionAddOperation_0= ruleEvolutionAddOperation | this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation )", 11, 0, input);

                throw nvae;
            }
            switch (alt11) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:772:5: this_EvolutionAddOperation_0= ruleEvolutionAddOperation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getEvolutionOperationAccess().getEvolutionAddOperationParserRuleCall_0_0(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleEvolutionAddOperation_in_ruleEvolutionOperation1285);
                    this_EvolutionAddOperation_0=ruleEvolutionAddOperation();
                    _fsp--;

                     
                            current = this_EvolutionAddOperation_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:782:5: this_EvolutionRemoveOperation_1= ruleEvolutionRemoveOperation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getEvolutionOperationAccess().getEvolutionRemoveOperationParserRuleCall_0_1(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleEvolutionRemoveOperation_in_ruleEvolutionOperation1312);
                    this_EvolutionRemoveOperation_1=ruleEvolutionRemoveOperation();
                    _fsp--;

                     
                            current = this_EvolutionRemoveOperation_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }

            match(input,12,FollowSets000.FOLLOW_12_in_ruleEvolutionOperation1322); 

                    createLeafNode(grammarAccess.getEvolutionOperationAccess().getSemicolonKeyword_1(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEvolutionOperation


    // $ANTLR start entryRuleEvolutionAddOperation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:802:1: entryRuleEvolutionAddOperation returns [EObject current=null] : iv_ruleEvolutionAddOperation= ruleEvolutionAddOperation EOF ;
    public final EObject entryRuleEvolutionAddOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvolutionAddOperation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:803:2: (iv_ruleEvolutionAddOperation= ruleEvolutionAddOperation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:804:2: iv_ruleEvolutionAddOperation= ruleEvolutionAddOperation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEvolutionAddOperationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEvolutionAddOperation_in_entryRuleEvolutionAddOperation1358);
            iv_ruleEvolutionAddOperation=ruleEvolutionAddOperation();
            _fsp--;

             current =iv_ruleEvolutionAddOperation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEvolutionAddOperation1368); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEvolutionAddOperation


    // $ANTLR start ruleEvolutionAddOperation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:811:1: ruleEvolutionAddOperation returns [EObject current=null] : ( ( 'add' | '+' ) ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) ) ) ;
    public final EObject ruleEvolutionAddOperation() throws RecognitionException {
        EObject current = null;

        EObject lv_children_3_0 = null;

        EObject lv_children_5_0 = null;

        EObject lv_children_7_0 = null;

        EObject lv_children_9_0 = null;

        EObject lv_children_10_0 = null;

        EObject lv_children_12_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:816:6: ( ( ( 'add' | '+' ) ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) ) ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:817:1: ( ( 'add' | '+' ) ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) ) )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:817:1: ( ( 'add' | '+' ) ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:817:2: ( 'add' | '+' ) ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:817:2: ( 'add' | '+' )
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==24) ) {
                alt12=1;
            }
            else if ( (LA12_0==25) ) {
                alt12=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("817:2: ( 'add' | '+' )", 12, 0, input);

                throw nvae;
            }
            switch (alt12) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:817:4: 'add'
                    {
                    match(input,24,FollowSets000.FOLLOW_24_in_ruleEvolutionAddOperation1404); 

                            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getAddKeyword_0_0(), null); 
                        

                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:822:7: '+'
                    {
                    match(input,25,FollowSets000.FOLLOW_25_in_ruleEvolutionAddOperation1420); 

                            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getPlusSignKeyword_0_1(), null); 
                        

                    }
                    break;

            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:826:2: ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) )
            int alt16=3;
            switch ( input.LA(1) ) {
            case 26:
                {
                alt16=1;
                }
                break;
            case 28:
                {
                alt16=2;
                }
                break;
            case RULE_ID:
                {
                alt16=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("826:2: ( ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* ) | ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* ) | ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* ) )", 16, 0, input);

                throw nvae;
            }

            switch (alt16) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:826:3: ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:826:3: ( 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )* )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:826:5: 'actor' ( (lv_children_3_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )*
                    {
                    match(input,26,FollowSets000.FOLLOW_26_in_ruleEvolutionAddOperation1433); 

                            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getActorKeyword_1_0_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:830:1: ( (lv_children_3_0= ruleActorDeclaration ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:831:1: (lv_children_3_0= ruleActorDeclaration )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:831:1: (lv_children_3_0= ruleActorDeclaration )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:832:3: lv_children_3_0= ruleActorDeclaration
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getEvolutionAddOperationAccess().getChildrenActorDeclarationParserRuleCall_1_0_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleActorDeclaration_in_ruleEvolutionAddOperation1454);
                    lv_children_3_0=ruleActorDeclaration();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionAddOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"children",
                    	        		lv_children_3_0, 
                    	        		"ActorDeclaration", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:854:2: ( ',' ( (lv_children_5_0= ruleActorDeclaration ) ) )*
                    loop13:
                    do {
                        int alt13=2;
                        int LA13_0 = input.LA(1);

                        if ( (LA13_0==27) ) {
                            alt13=1;
                        }


                        switch (alt13) {
                    	case 1 :
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:854:4: ',' ( (lv_children_5_0= ruleActorDeclaration ) )
                    	    {
                    	    match(input,27,FollowSets000.FOLLOW_27_in_ruleEvolutionAddOperation1465); 

                    	            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getCommaKeyword_1_0_2_0(), null); 
                    	        
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:858:1: ( (lv_children_5_0= ruleActorDeclaration ) )
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:859:1: (lv_children_5_0= ruleActorDeclaration )
                    	    {
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:859:1: (lv_children_5_0= ruleActorDeclaration )
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:860:3: lv_children_5_0= ruleActorDeclaration
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionAddOperationAccess().getChildrenActorDeclarationParserRuleCall_1_0_2_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleActorDeclaration_in_ruleEvolutionAddOperation1486);
                    	    lv_children_5_0=ruleActorDeclaration();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getEvolutionAddOperationRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"children",
                    	    	        		lv_children_5_0, 
                    	    	        		"ActorDeclaration", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop13;
                        }
                    } while (true);


                    }


                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:883:6: ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:883:6: ( 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )* )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:883:8: 'goal' ( (lv_children_7_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )*
                    {
                    match(input,28,FollowSets000.FOLLOW_28_in_ruleEvolutionAddOperation1506); 

                            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getGoalKeyword_1_1_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:887:1: ( (lv_children_7_0= ruleGoalDeclaration ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:888:1: (lv_children_7_0= ruleGoalDeclaration )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:888:1: (lv_children_7_0= ruleGoalDeclaration )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:889:3: lv_children_7_0= ruleGoalDeclaration
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getEvolutionAddOperationAccess().getChildrenGoalDeclarationParserRuleCall_1_1_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleGoalDeclaration_in_ruleEvolutionAddOperation1527);
                    lv_children_7_0=ruleGoalDeclaration();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionAddOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"children",
                    	        		lv_children_7_0, 
                    	        		"GoalDeclaration", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:911:2: ( ',' ( (lv_children_9_0= ruleGoalDeclaration ) ) )*
                    loop14:
                    do {
                        int alt14=2;
                        int LA14_0 = input.LA(1);

                        if ( (LA14_0==27) ) {
                            alt14=1;
                        }


                        switch (alt14) {
                    	case 1 :
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:911:4: ',' ( (lv_children_9_0= ruleGoalDeclaration ) )
                    	    {
                    	    match(input,27,FollowSets000.FOLLOW_27_in_ruleEvolutionAddOperation1538); 

                    	            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getCommaKeyword_1_1_2_0(), null); 
                    	        
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:915:1: ( (lv_children_9_0= ruleGoalDeclaration ) )
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:916:1: (lv_children_9_0= ruleGoalDeclaration )
                    	    {
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:916:1: (lv_children_9_0= ruleGoalDeclaration )
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:917:3: lv_children_9_0= ruleGoalDeclaration
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionAddOperationAccess().getChildrenGoalDeclarationParserRuleCall_1_1_2_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleGoalDeclaration_in_ruleEvolutionAddOperation1559);
                    	    lv_children_9_0=ruleGoalDeclaration();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getEvolutionAddOperationRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"children",
                    	    	        		lv_children_9_0, 
                    	    	        		"GoalDeclaration", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop14;
                        }
                    } while (true);


                    }


                    }
                    break;
                case 3 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:940:6: ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:940:6: ( ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )* )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:940:7: ( (lv_children_10_0= ruleRelationDeclaration ) ) ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )*
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:940:7: ( (lv_children_10_0= ruleRelationDeclaration ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:941:1: (lv_children_10_0= ruleRelationDeclaration )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:941:1: (lv_children_10_0= ruleRelationDeclaration )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:942:3: lv_children_10_0= ruleRelationDeclaration
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getEvolutionAddOperationAccess().getChildrenRelationDeclarationParserRuleCall_1_2_0_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleRelationDeclaration_in_ruleEvolutionAddOperation1590);
                    lv_children_10_0=ruleRelationDeclaration();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionAddOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"children",
                    	        		lv_children_10_0, 
                    	        		"RelationDeclaration", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }

                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:964:2: ( ',' ( (lv_children_12_0= ruleRelationDeclaration ) ) )*
                    loop15:
                    do {
                        int alt15=2;
                        int LA15_0 = input.LA(1);

                        if ( (LA15_0==27) ) {
                            alt15=1;
                        }


                        switch (alt15) {
                    	case 1 :
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:964:4: ',' ( (lv_children_12_0= ruleRelationDeclaration ) )
                    	    {
                    	    match(input,27,FollowSets000.FOLLOW_27_in_ruleEvolutionAddOperation1601); 

                    	            createLeafNode(grammarAccess.getEvolutionAddOperationAccess().getCommaKeyword_1_2_1_0(), null); 
                    	        
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:968:1: ( (lv_children_12_0= ruleRelationDeclaration ) )
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:969:1: (lv_children_12_0= ruleRelationDeclaration )
                    	    {
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:969:1: (lv_children_12_0= ruleRelationDeclaration )
                    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:970:3: lv_children_12_0= ruleRelationDeclaration
                    	    {
                    	     
                    	    	        currentNode=createCompositeNode(grammarAccess.getEvolutionAddOperationAccess().getChildrenRelationDeclarationParserRuleCall_1_2_1_1_0(), currentNode); 
                    	    	    
                    	    pushFollow(FollowSets000.FOLLOW_ruleRelationDeclaration_in_ruleEvolutionAddOperation1622);
                    	    lv_children_12_0=ruleRelationDeclaration();
                    	    _fsp--;


                    	    	        if (current==null) {
                    	    	            current = factory.create(grammarAccess.getEvolutionAddOperationRule().getType().getClassifier());
                    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	    	        }
                    	    	        try {
                    	    	       		add(
                    	    	       			current, 
                    	    	       			"children",
                    	    	        		lv_children_12_0, 
                    	    	        		"RelationDeclaration", 
                    	    	        		currentNode);
                    	    	        } catch (ValueConverterException vce) {
                    	    				handleValueConverterException(vce);
                    	    	        }
                    	    	        currentNode = currentNode.getParent();
                    	    	    

                    	    }


                    	    }


                    	    }
                    	    break;

                    	default :
                    	    break loop15;
                        }
                    } while (true);


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEvolutionAddOperation


    // $ANTLR start entryRuleEvolutionRemoveOperation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1000:1: entryRuleEvolutionRemoveOperation returns [EObject current=null] : iv_ruleEvolutionRemoveOperation= ruleEvolutionRemoveOperation EOF ;
    public final EObject entryRuleEvolutionRemoveOperation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleEvolutionRemoveOperation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1001:2: (iv_ruleEvolutionRemoveOperation= ruleEvolutionRemoveOperation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1002:2: iv_ruleEvolutionRemoveOperation= ruleEvolutionRemoveOperation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getEvolutionRemoveOperationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleEvolutionRemoveOperation_in_entryRuleEvolutionRemoveOperation1662);
            iv_ruleEvolutionRemoveOperation=ruleEvolutionRemoveOperation();
            _fsp--;

             current =iv_ruleEvolutionRemoveOperation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEvolutionRemoveOperation1672); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleEvolutionRemoveOperation


    // $ANTLR start ruleEvolutionRemoveOperation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1009:1: ruleEvolutionRemoveOperation returns [EObject current=null] : ( ( 'remove' | '-' ) ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) ) ( ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) ) )* ) ;
    public final EObject ruleEvolutionRemoveOperation() throws RecognitionException {
        EObject current = null;

        EObject lv_children_3_0 = null;

        EObject lv_children_6_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1014:6: ( ( ( 'remove' | '-' ) ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) ) ( ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) ) )* ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1015:1: ( ( 'remove' | '-' ) ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) ) ( ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) ) )* )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1015:1: ( ( 'remove' | '-' ) ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) ) ( ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) ) )* )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1015:2: ( 'remove' | '-' ) ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) ) ( ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) ) )*
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1015:2: ( 'remove' | '-' )
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==29) ) {
                alt17=1;
            }
            else if ( (LA17_0==30) ) {
                alt17=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1015:2: ( 'remove' | '-' )", 17, 0, input);

                throw nvae;
            }
            switch (alt17) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1015:4: 'remove'
                    {
                    match(input,29,FollowSets000.FOLLOW_29_in_ruleEvolutionRemoveOperation1708); 

                            createLeafNode(grammarAccess.getEvolutionRemoveOperationAccess().getRemoveKeyword_0_0(), null); 
                        

                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1020:7: '-'
                    {
                    match(input,30,FollowSets000.FOLLOW_30_in_ruleEvolutionRemoveOperation1724); 

                            createLeafNode(grammarAccess.getEvolutionRemoveOperationAccess().getHyphenMinusKeyword_0_1(), null); 
                        

                    }
                    break;

            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1024:2: ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) )
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==RULE_ID) ) {
                int LA18_1 = input.LA(2);

                if ( (LA18_1==17||(LA18_1>=36 && LA18_1<=38)) ) {
                    alt18=2;
                }
                else if ( (LA18_1==EOF||LA18_1==12||LA18_1==27||LA18_1==34) ) {
                    alt18=1;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("1024:2: ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) )", 18, 1, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1024:2: ( ( ( ruleQualifiedName ) ) | ( (lv_children_3_0= ruleRelationDeclaration ) ) )", 18, 0, input);

                throw nvae;
            }
            switch (alt18) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1024:3: ( ( ruleQualifiedName ) )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1024:3: ( ( ruleQualifiedName ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1025:1: ( ruleQualifiedName )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1025:1: ( ruleQualifiedName )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1026:3: ruleQualifiedName
                    {

                    			if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionRemoveOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                            
                     
                    	        currentNode=createCompositeNode(grammarAccess.getEvolutionRemoveOperationAccess().getEntityEntityCrossReference_1_0_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_ruleEvolutionRemoveOperation1749);
                    ruleQualifiedName();
                    _fsp--;

                     
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1041:6: ( (lv_children_3_0= ruleRelationDeclaration ) )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1041:6: ( (lv_children_3_0= ruleRelationDeclaration ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1042:1: (lv_children_3_0= ruleRelationDeclaration )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1042:1: (lv_children_3_0= ruleRelationDeclaration )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1043:3: lv_children_3_0= ruleRelationDeclaration
                    {
                     
                    	        currentNode=createCompositeNode(grammarAccess.getEvolutionRemoveOperationAccess().getChildrenRelationDeclarationParserRuleCall_1_1_0(), currentNode); 
                    	    
                    pushFollow(FollowSets000.FOLLOW_ruleRelationDeclaration_in_ruleEvolutionRemoveOperation1776);
                    lv_children_3_0=ruleRelationDeclaration();
                    _fsp--;


                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getEvolutionRemoveOperationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode.getParent(), current);
                    	        }
                    	        try {
                    	       		add(
                    	       			current, 
                    	       			"children",
                    	        		lv_children_3_0, 
                    	        		"RelationDeclaration", 
                    	        		currentNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	        currentNode = currentNode.getParent();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1065:3: ( ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) ) )*
            loop20:
            do {
                int alt20=2;
                int LA20_0 = input.LA(1);

                if ( (LA20_0==27) ) {
                    alt20=1;
                }


                switch (alt20) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1065:5: ',' ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) )
            	    {
            	    match(input,27,FollowSets000.FOLLOW_27_in_ruleEvolutionRemoveOperation1788); 

            	            createLeafNode(grammarAccess.getEvolutionRemoveOperationAccess().getCommaKeyword_2_0(), null); 
            	        
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1069:1: ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) )
            	    int alt19=2;
            	    int LA19_0 = input.LA(1);

            	    if ( (LA19_0==RULE_ID) ) {
            	        int LA19_1 = input.LA(2);

            	        if ( (LA19_1==17||(LA19_1>=36 && LA19_1<=38)) ) {
            	            alt19=2;
            	        }
            	        else if ( (LA19_1==EOF||LA19_1==12||LA19_1==27||LA19_1==34) ) {
            	            alt19=1;
            	        }
            	        else {
            	            NoViableAltException nvae =
            	                new NoViableAltException("1069:1: ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) )", 19, 1, input);

            	            throw nvae;
            	        }
            	    }
            	    else {
            	        NoViableAltException nvae =
            	            new NoViableAltException("1069:1: ( ( ( ruleQualifiedName ) ) | ( (lv_children_6_0= ruleRelationDeclaration ) ) )", 19, 0, input);

            	        throw nvae;
            	    }
            	    switch (alt19) {
            	        case 1 :
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1069:2: ( ( ruleQualifiedName ) )
            	            {
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1069:2: ( ( ruleQualifiedName ) )
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1070:1: ( ruleQualifiedName )
            	            {
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1070:1: ( ruleQualifiedName )
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1071:3: ruleQualifiedName
            	            {

            	            			if (current==null) {
            	            	            current = factory.create(grammarAccess.getEvolutionRemoveOperationRule().getType().getClassifier());
            	            	            associateNodeWithAstElement(currentNode, current);
            	            	        }
            	                    
            	             
            	            	        currentNode=createCompositeNode(grammarAccess.getEvolutionRemoveOperationAccess().getEntityEntityCrossReference_2_1_0_0(), currentNode); 
            	            	    
            	            pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_ruleEvolutionRemoveOperation1812);
            	            ruleQualifiedName();
            	            _fsp--;

            	             
            	            	        currentNode = currentNode.getParent();
            	            	    

            	            }


            	            }


            	            }
            	            break;
            	        case 2 :
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1086:6: ( (lv_children_6_0= ruleRelationDeclaration ) )
            	            {
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1086:6: ( (lv_children_6_0= ruleRelationDeclaration ) )
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1087:1: (lv_children_6_0= ruleRelationDeclaration )
            	            {
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1087:1: (lv_children_6_0= ruleRelationDeclaration )
            	            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1088:3: lv_children_6_0= ruleRelationDeclaration
            	            {
            	             
            	            	        currentNode=createCompositeNode(grammarAccess.getEvolutionRemoveOperationAccess().getChildrenRelationDeclarationParserRuleCall_2_1_1_0(), currentNode); 
            	            	    
            	            pushFollow(FollowSets000.FOLLOW_ruleRelationDeclaration_in_ruleEvolutionRemoveOperation1839);
            	            lv_children_6_0=ruleRelationDeclaration();
            	            _fsp--;


            	            	        if (current==null) {
            	            	            current = factory.create(grammarAccess.getEvolutionRemoveOperationRule().getType().getClassifier());
            	            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	            	        }
            	            	        try {
            	            	       		add(
            	            	       			current, 
            	            	       			"children",
            	            	        		lv_children_6_0, 
            	            	        		"RelationDeclaration", 
            	            	        		currentNode);
            	            	        } catch (ValueConverterException vce) {
            	            				handleValueConverterException(vce);
            	            	        }
            	            	        currentNode = currentNode.getParent();
            	            	    

            	            }


            	            }


            	            }
            	            break;

            	    }


            	    }
            	    break;

            	default :
            	    break loop20;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleEvolutionRemoveOperation


    // $ANTLR start entryRuleRequirementModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1118:1: entryRuleRequirementModel returns [EObject current=null] : iv_ruleRequirementModel= ruleRequirementModel EOF ;
    public final EObject entryRuleRequirementModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRequirementModel = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1119:2: (iv_ruleRequirementModel= ruleRequirementModel EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1120:2: iv_ruleRequirementModel= ruleRequirementModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRequirementModelRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleRequirementModel_in_entryRuleRequirementModel1878);
            iv_ruleRequirementModel=ruleRequirementModel();
            _fsp--;

             current =iv_ruleRequirementModel; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRequirementModel1888); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRequirementModel


    // $ANTLR start ruleRequirementModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1127:1: ruleRequirementModel returns [EObject current=null] : (this_FullModel_0= ruleFullModel | this_SubModel_1= ruleSubModel ) ;
    public final EObject ruleRequirementModel() throws RecognitionException {
        EObject current = null;

        EObject this_FullModel_0 = null;

        EObject this_SubModel_1 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1132:6: ( (this_FullModel_0= ruleFullModel | this_SubModel_1= ruleSubModel ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1133:1: (this_FullModel_0= ruleFullModel | this_SubModel_1= ruleSubModel )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1133:1: (this_FullModel_0= ruleFullModel | this_SubModel_1= ruleSubModel )
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==16) ) {
                alt21=1;
            }
            else if ( (LA21_0==31) ) {
                alt21=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1133:1: (this_FullModel_0= ruleFullModel | this_SubModel_1= ruleSubModel )", 21, 0, input);

                throw nvae;
            }
            switch (alt21) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1134:5: this_FullModel_0= ruleFullModel
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getRequirementModelAccess().getFullModelParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleFullModel_in_ruleRequirementModel1935);
                    this_FullModel_0=ruleFullModel();
                    _fsp--;

                     
                            current = this_FullModel_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1144:5: this_SubModel_1= ruleSubModel
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getRequirementModelAccess().getSubModelParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleSubModel_in_ruleRequirementModel1962);
                    this_SubModel_1=ruleSubModel();
                    _fsp--;

                     
                            current = this_SubModel_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRequirementModel


    // $ANTLR start entryRuleSubModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1160:1: entryRuleSubModel returns [EObject current=null] : iv_ruleSubModel= ruleSubModel EOF ;
    public final EObject entryRuleSubModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubModel = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1161:2: (iv_ruleSubModel= ruleSubModel EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1162:2: iv_ruleSubModel= ruleSubModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getSubModelRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleSubModel_in_entryRuleSubModel1997);
            iv_ruleSubModel=ruleSubModel();
            _fsp--;

             current =iv_ruleSubModel; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSubModel2007); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleSubModel


    // $ANTLR start ruleSubModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1169:1: ruleSubModel returns [EObject current=null] : ( 'submodel' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';' )* '}' ) ;
    public final EObject ruleSubModel() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token lv_text_3_0=null;
        EObject lv_imports_7_0 = null;

        EObject lv_children_9_0 = null;

        EObject lv_children_11_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1174:6: ( ( 'submodel' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';' )* '}' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1175:1: ( 'submodel' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';' )* '}' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1175:1: ( 'submodel' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';' )* '}' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1175:3: 'submodel' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? 'on' ( ( RULE_ID ) ) '{' ( (lv_imports_7_0= ruleImportNamespace ) )* ( 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';' )* '}'
            {
            match(input,31,FollowSets000.FOLLOW_31_in_ruleSubModel2042); 

                    createLeafNode(grammarAccess.getSubModelAccess().getSubmodelKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1179:1: ( (lv_name_1_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1180:1: (lv_name_1_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1180:1: (lv_name_1_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1181:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleSubModel2059); 

            			createLeafNode(grammarAccess.getSubModelAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getSubModelRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1203:2: ( ':' ( (lv_text_3_0= RULE_STRING ) ) )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==17) ) {
                alt22=1;
            }
            switch (alt22) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1203:4: ':' ( (lv_text_3_0= RULE_STRING ) )
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleSubModel2075); 

                            createLeafNode(grammarAccess.getSubModelAccess().getColonKeyword_2_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1207:1: ( (lv_text_3_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1208:1: (lv_text_3_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1208:1: (lv_text_3_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1209:3: lv_text_3_0= RULE_STRING
                    {
                    lv_text_3_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleSubModel2092); 

                    			createLeafNode(grammarAccess.getSubModelAccess().getTextSTRINGTerminalRuleCall_2_1_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getSubModelRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_3_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,18,FollowSets000.FOLLOW_18_in_ruleSubModel2109); 

                    createLeafNode(grammarAccess.getSubModelAccess().getOnKeyword_3(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1235:1: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1236:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1236:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1237:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getSubModelRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleSubModel2127); 

            		createLeafNode(grammarAccess.getSubModelAccess().getParentModelCrossReference_4_0(), "parent"); 
            	

            }


            }

            match(input,19,FollowSets000.FOLLOW_19_in_ruleSubModel2137); 

                    createLeafNode(grammarAccess.getSubModelAccess().getLeftCurlyBracketKeyword_5(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1253:1: ( (lv_imports_7_0= ruleImportNamespace ) )*
            loop23:
            do {
                int alt23=2;
                int LA23_0 = input.LA(1);

                if ( (LA23_0==14) ) {
                    alt23=1;
                }


                switch (alt23) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1254:1: (lv_imports_7_0= ruleImportNamespace )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1254:1: (lv_imports_7_0= ruleImportNamespace )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1255:3: lv_imports_7_0= ruleImportNamespace
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getSubModelAccess().getImportsImportNamespaceParserRuleCall_6_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleImportNamespace_in_ruleSubModel2158);
            	    lv_imports_7_0=ruleImportNamespace();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getSubModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"imports",
            	    	        		lv_imports_7_0, 
            	    	        		"ImportNamespace", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop23;
                }
            } while (true);

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1277:3: ( 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';' )*
            loop25:
            do {
                int alt25=2;
                int LA25_0 = input.LA(1);

                if ( (LA25_0==13) ) {
                    alt25=1;
                }


                switch (alt25) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1277:5: 'include' ( (lv_children_9_0= ruleSubModelInclusion ) ) ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )* ';'
            	    {
            	    match(input,13,FollowSets000.FOLLOW_13_in_ruleSubModel2170); 

            	            createLeafNode(grammarAccess.getSubModelAccess().getIncludeKeyword_7_0(), null); 
            	        
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1281:1: ( (lv_children_9_0= ruleSubModelInclusion ) )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1282:1: (lv_children_9_0= ruleSubModelInclusion )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1282:1: (lv_children_9_0= ruleSubModelInclusion )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1283:3: lv_children_9_0= ruleSubModelInclusion
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getSubModelAccess().getChildrenSubModelInclusionParserRuleCall_7_1_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleSubModelInclusion_in_ruleSubModel2191);
            	    lv_children_9_0=ruleSubModelInclusion();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getSubModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_9_0, 
            	    	        		"SubModelInclusion", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }

            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1305:2: ( ',' ( (lv_children_11_0= ruleSubModelInclusion ) ) )*
            	    loop24:
            	    do {
            	        int alt24=2;
            	        int LA24_0 = input.LA(1);

            	        if ( (LA24_0==27) ) {
            	            alt24=1;
            	        }


            	        switch (alt24) {
            	    	case 1 :
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1305:4: ',' ( (lv_children_11_0= ruleSubModelInclusion ) )
            	    	    {
            	    	    match(input,27,FollowSets000.FOLLOW_27_in_ruleSubModel2202); 

            	    	            createLeafNode(grammarAccess.getSubModelAccess().getCommaKeyword_7_2_0(), null); 
            	    	        
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1309:1: ( (lv_children_11_0= ruleSubModelInclusion ) )
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1310:1: (lv_children_11_0= ruleSubModelInclusion )
            	    	    {
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1310:1: (lv_children_11_0= ruleSubModelInclusion )
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1311:3: lv_children_11_0= ruleSubModelInclusion
            	    	    {
            	    	     
            	    	    	        currentNode=createCompositeNode(grammarAccess.getSubModelAccess().getChildrenSubModelInclusionParserRuleCall_7_2_1_0(), currentNode); 
            	    	    	    
            	    	    pushFollow(FollowSets000.FOLLOW_ruleSubModelInclusion_in_ruleSubModel2223);
            	    	    lv_children_11_0=ruleSubModelInclusion();
            	    	    _fsp--;


            	    	    	        if (current==null) {
            	    	    	            current = factory.create(grammarAccess.getSubModelRule().getType().getClassifier());
            	    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	    	        }
            	    	    	        try {
            	    	    	       		add(
            	    	    	       			current, 
            	    	    	       			"children",
            	    	    	        		lv_children_11_0, 
            	    	    	        		"SubModelInclusion", 
            	    	    	        		currentNode);
            	    	    	        } catch (ValueConverterException vce) {
            	    	    				handleValueConverterException(vce);
            	    	    	        }
            	    	    	        currentNode = currentNode.getParent();
            	    	    	    

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop24;
            	        }
            	    } while (true);

            	    match(input,12,FollowSets000.FOLLOW_12_in_ruleSubModel2235); 

            	            createLeafNode(grammarAccess.getSubModelAccess().getSemicolonKeyword_7_3(), null); 
            	        

            	    }
            	    break;

            	default :
            	    break loop25;
                }
            } while (true);

            match(input,20,FollowSets000.FOLLOW_20_in_ruleSubModel2247); 

                    createLeafNode(grammarAccess.getSubModelAccess().getRightCurlyBracketKeyword_8(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSubModel


    // $ANTLR start entryRuleSubModelInclusion
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1349:1: entryRuleSubModelInclusion returns [EObject current=null] : iv_ruleSubModelInclusion= ruleSubModelInclusion EOF ;
    public final EObject entryRuleSubModelInclusion() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleSubModelInclusion = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1350:2: (iv_ruleSubModelInclusion= ruleSubModelInclusion EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1351:2: iv_ruleSubModelInclusion= ruleSubModelInclusion EOF
            {
             currentNode = createCompositeNode(grammarAccess.getSubModelInclusionRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleSubModelInclusion_in_entryRuleSubModelInclusion2283);
            iv_ruleSubModelInclusion=ruleSubModelInclusion();
            _fsp--;

             current =iv_ruleSubModelInclusion; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSubModelInclusion2293); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleSubModelInclusion


    // $ANTLR start ruleSubModelInclusion
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1358:1: ruleSubModelInclusion returns [EObject current=null] : ( ( ( ruleQualifiedName ) ) ( ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) ) )? ) ;
    public final EObject ruleSubModelInclusion() throws RecognitionException {
        EObject current = null;

        Token lv_closure_1_1=null;
        Token lv_closure_1_2=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1363:6: ( ( ( ( ruleQualifiedName ) ) ( ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) ) )? ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1364:1: ( ( ( ruleQualifiedName ) ) ( ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) ) )? )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1364:1: ( ( ( ruleQualifiedName ) ) ( ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) ) )? )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1364:2: ( ( ruleQualifiedName ) ) ( ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) ) )?
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1364:2: ( ( ruleQualifiedName ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1365:1: ( ruleQualifiedName )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1365:1: ( ruleQualifiedName )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1366:3: ruleQualifiedName
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getSubModelInclusionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
             
            	        currentNode=createCompositeNode(grammarAccess.getSubModelInclusionAccess().getElementEntityCrossReference_0_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_ruleSubModelInclusion2341);
            ruleQualifiedName();
            _fsp--;

             
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1380:2: ( ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) ) )?
            int alt27=2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0==25||LA27_0==32) ) {
                alt27=1;
            }
            switch (alt27) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1381:1: ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1381:1: ( (lv_closure_1_1= '*' | lv_closure_1_2= '+' ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1382:1: (lv_closure_1_1= '*' | lv_closure_1_2= '+' )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1382:1: (lv_closure_1_1= '*' | lv_closure_1_2= '+' )
                    int alt26=2;
                    int LA26_0 = input.LA(1);

                    if ( (LA26_0==32) ) {
                        alt26=1;
                    }
                    else if ( (LA26_0==25) ) {
                        alt26=2;
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("1382:1: (lv_closure_1_1= '*' | lv_closure_1_2= '+' )", 26, 0, input);

                        throw nvae;
                    }
                    switch (alt26) {
                        case 1 :
                            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1383:3: lv_closure_1_1= '*'
                            {
                            lv_closure_1_1=(Token)input.LT(1);
                            match(input,32,FollowSets000.FOLLOW_32_in_ruleSubModelInclusion2361); 

                                    createLeafNode(grammarAccess.getSubModelInclusionAccess().getClosureAsteriskKeyword_1_0_0(), "closure"); 
                                

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getSubModelInclusionRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        
                            	        try {
                            	       		set(current, "closure", lv_closure_1_1, null, lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }
                            break;
                        case 2 :
                            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1401:8: lv_closure_1_2= '+'
                            {
                            lv_closure_1_2=(Token)input.LT(1);
                            match(input,25,FollowSets000.FOLLOW_25_in_ruleSubModelInclusion2390); 

                                    createLeafNode(grammarAccess.getSubModelInclusionAccess().getClosurePlusSignKeyword_1_0_1(), "closure"); 
                                

                            	        if (current==null) {
                            	            current = factory.create(grammarAccess.getSubModelInclusionRule().getType().getClassifier());
                            	            associateNodeWithAstElement(currentNode, current);
                            	        }
                            	        
                            	        try {
                            	       		set(current, "closure", lv_closure_1_2, null, lastConsumedNode);
                            	        } catch (ValueConverterException vce) {
                            				handleValueConverterException(vce);
                            	        }
                            	    

                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleSubModelInclusion


    // $ANTLR start entryRuleFullModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1430:1: entryRuleFullModel returns [EObject current=null] : iv_ruleFullModel= ruleFullModel EOF ;
    public final EObject entryRuleFullModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleFullModel = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1431:2: (iv_ruleFullModel= ruleFullModel EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1432:2: iv_ruleFullModel= ruleFullModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getFullModelRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleFullModel_in_entryRuleFullModel2443);
            iv_ruleFullModel=ruleFullModel();
            _fsp--;

             current =iv_ruleFullModel; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleFullModel2453); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleFullModel


    // $ANTLR start ruleFullModel
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1439:1: ruleFullModel returns [EObject current=null] : ( 'model' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? '{' ( ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' ) | ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' ) | ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' ) )* '}' ) ;
    public final EObject ruleFullModel() throws RecognitionException {
        EObject current = null;

        Token lv_name_1_0=null;
        Token lv_text_3_0=null;
        EObject lv_children_6_0 = null;

        EObject lv_children_8_0 = null;

        EObject lv_children_11_0 = null;

        EObject lv_children_13_0 = null;

        EObject lv_children_15_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1444:6: ( ( 'model' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? '{' ( ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' ) | ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' ) | ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' ) )* '}' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1445:1: ( 'model' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? '{' ( ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' ) | ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' ) | ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' ) )* '}' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1445:1: ( 'model' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? '{' ( ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' ) | ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' ) | ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' ) )* '}' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1445:3: 'model' ( (lv_name_1_0= RULE_ID ) ) ( ':' ( (lv_text_3_0= RULE_STRING ) ) )? '{' ( ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' ) | ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' ) | ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' ) )* '}'
            {
            match(input,16,FollowSets000.FOLLOW_16_in_ruleFullModel2488); 

                    createLeafNode(grammarAccess.getFullModelAccess().getModelKeyword_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1449:1: ( (lv_name_1_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1450:1: (lv_name_1_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1450:1: (lv_name_1_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1451:3: lv_name_1_0= RULE_ID
            {
            lv_name_1_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleFullModel2505); 

            			createLeafNode(grammarAccess.getFullModelAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_1_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1473:2: ( ':' ( (lv_text_3_0= RULE_STRING ) ) )?
            int alt28=2;
            int LA28_0 = input.LA(1);

            if ( (LA28_0==17) ) {
                alt28=1;
            }
            switch (alt28) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1473:4: ':' ( (lv_text_3_0= RULE_STRING ) )
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleFullModel2521); 

                            createLeafNode(grammarAccess.getFullModelAccess().getColonKeyword_2_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1477:1: ( (lv_text_3_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1478:1: (lv_text_3_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1478:1: (lv_text_3_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1479:3: lv_text_3_0= RULE_STRING
                    {
                    lv_text_3_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleFullModel2538); 

                    			createLeafNode(grammarAccess.getFullModelAccess().getTextSTRINGTerminalRuleCall_2_1_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_3_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;

            }

            match(input,19,FollowSets000.FOLLOW_19_in_ruleFullModel2555); 

                    createLeafNode(grammarAccess.getFullModelAccess().getLeftCurlyBracketKeyword_3(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1505:1: ( ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' ) | ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' ) | ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' ) )*
            loop31:
            do {
                int alt31=4;
                switch ( input.LA(1) ) {
                case 26:
                    {
                    alt31=1;
                    }
                    break;
                case 28:
                    {
                    alt31=2;
                    }
                    break;
                case RULE_ID:
                    {
                    alt31=3;
                    }
                    break;

                }

                switch (alt31) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1505:2: ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1505:2: ( 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';' )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1505:4: 'actor' ( (lv_children_6_0= ruleActorDeclaration ) ) ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )* ';'
            	    {
            	    match(input,26,FollowSets000.FOLLOW_26_in_ruleFullModel2567); 

            	            createLeafNode(grammarAccess.getFullModelAccess().getActorKeyword_4_0_0(), null); 
            	        
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1509:1: ( (lv_children_6_0= ruleActorDeclaration ) )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1510:1: (lv_children_6_0= ruleActorDeclaration )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1510:1: (lv_children_6_0= ruleActorDeclaration )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1511:3: lv_children_6_0= ruleActorDeclaration
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getFullModelAccess().getChildrenActorDeclarationParserRuleCall_4_0_1_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleActorDeclaration_in_ruleFullModel2588);
            	    lv_children_6_0=ruleActorDeclaration();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_6_0, 
            	    	        		"ActorDeclaration", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }

            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1533:2: ( ',' ( (lv_children_8_0= ruleActorDeclaration ) ) )*
            	    loop29:
            	    do {
            	        int alt29=2;
            	        int LA29_0 = input.LA(1);

            	        if ( (LA29_0==27) ) {
            	            alt29=1;
            	        }


            	        switch (alt29) {
            	    	case 1 :
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1533:4: ',' ( (lv_children_8_0= ruleActorDeclaration ) )
            	    	    {
            	    	    match(input,27,FollowSets000.FOLLOW_27_in_ruleFullModel2599); 

            	    	            createLeafNode(grammarAccess.getFullModelAccess().getCommaKeyword_4_0_2_0(), null); 
            	    	        
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1537:1: ( (lv_children_8_0= ruleActorDeclaration ) )
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1538:1: (lv_children_8_0= ruleActorDeclaration )
            	    	    {
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1538:1: (lv_children_8_0= ruleActorDeclaration )
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1539:3: lv_children_8_0= ruleActorDeclaration
            	    	    {
            	    	     
            	    	    	        currentNode=createCompositeNode(grammarAccess.getFullModelAccess().getChildrenActorDeclarationParserRuleCall_4_0_2_1_0(), currentNode); 
            	    	    	    
            	    	    pushFollow(FollowSets000.FOLLOW_ruleActorDeclaration_in_ruleFullModel2620);
            	    	    lv_children_8_0=ruleActorDeclaration();
            	    	    _fsp--;


            	    	    	        if (current==null) {
            	    	    	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
            	    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	    	        }
            	    	    	        try {
            	    	    	       		add(
            	    	    	       			current, 
            	    	    	       			"children",
            	    	    	        		lv_children_8_0, 
            	    	    	        		"ActorDeclaration", 
            	    	    	        		currentNode);
            	    	    	        } catch (ValueConverterException vce) {
            	    	    				handleValueConverterException(vce);
            	    	    	        }
            	    	    	        currentNode = currentNode.getParent();
            	    	    	    

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop29;
            	        }
            	    } while (true);

            	    match(input,12,FollowSets000.FOLLOW_12_in_ruleFullModel2632); 

            	            createLeafNode(grammarAccess.getFullModelAccess().getSemicolonKeyword_4_0_3(), null); 
            	        

            	    }


            	    }
            	    break;
            	case 2 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1566:6: ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1566:6: ( 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';' )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1566:8: 'goal' ( (lv_children_11_0= ruleGoalDeclaration ) ) ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )* ';'
            	    {
            	    match(input,28,FollowSets000.FOLLOW_28_in_ruleFullModel2650); 

            	            createLeafNode(grammarAccess.getFullModelAccess().getGoalKeyword_4_1_0(), null); 
            	        
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1570:1: ( (lv_children_11_0= ruleGoalDeclaration ) )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1571:1: (lv_children_11_0= ruleGoalDeclaration )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1571:1: (lv_children_11_0= ruleGoalDeclaration )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1572:3: lv_children_11_0= ruleGoalDeclaration
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getFullModelAccess().getChildrenGoalDeclarationParserRuleCall_4_1_1_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleGoalDeclaration_in_ruleFullModel2671);
            	    lv_children_11_0=ruleGoalDeclaration();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_11_0, 
            	    	        		"GoalDeclaration", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }

            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1594:2: ( ',' ( (lv_children_13_0= ruleGoalDeclaration ) ) )*
            	    loop30:
            	    do {
            	        int alt30=2;
            	        int LA30_0 = input.LA(1);

            	        if ( (LA30_0==27) ) {
            	            alt30=1;
            	        }


            	        switch (alt30) {
            	    	case 1 :
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1594:4: ',' ( (lv_children_13_0= ruleGoalDeclaration ) )
            	    	    {
            	    	    match(input,27,FollowSets000.FOLLOW_27_in_ruleFullModel2682); 

            	    	            createLeafNode(grammarAccess.getFullModelAccess().getCommaKeyword_4_1_2_0(), null); 
            	    	        
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1598:1: ( (lv_children_13_0= ruleGoalDeclaration ) )
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1599:1: (lv_children_13_0= ruleGoalDeclaration )
            	    	    {
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1599:1: (lv_children_13_0= ruleGoalDeclaration )
            	    	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1600:3: lv_children_13_0= ruleGoalDeclaration
            	    	    {
            	    	     
            	    	    	        currentNode=createCompositeNode(grammarAccess.getFullModelAccess().getChildrenGoalDeclarationParserRuleCall_4_1_2_1_0(), currentNode); 
            	    	    	    
            	    	    pushFollow(FollowSets000.FOLLOW_ruleGoalDeclaration_in_ruleFullModel2703);
            	    	    lv_children_13_0=ruleGoalDeclaration();
            	    	    _fsp--;


            	    	    	        if (current==null) {
            	    	    	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
            	    	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	    	        }
            	    	    	        try {
            	    	    	       		add(
            	    	    	       			current, 
            	    	    	       			"children",
            	    	    	        		lv_children_13_0, 
            	    	    	        		"GoalDeclaration", 
            	    	    	        		currentNode);
            	    	    	        } catch (ValueConverterException vce) {
            	    	    				handleValueConverterException(vce);
            	    	    	        }
            	    	    	        currentNode = currentNode.getParent();
            	    	    	    

            	    	    }


            	    	    }


            	    	    }
            	    	    break;

            	    	default :
            	    	    break loop30;
            	        }
            	    } while (true);

            	    match(input,12,FollowSets000.FOLLOW_12_in_ruleFullModel2715); 

            	            createLeafNode(grammarAccess.getFullModelAccess().getSemicolonKeyword_4_1_3(), null); 
            	        

            	    }


            	    }
            	    break;
            	case 3 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1627:6: ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1627:6: ( ( (lv_children_15_0= ruleRelationDeclaration ) ) ';' )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1627:7: ( (lv_children_15_0= ruleRelationDeclaration ) ) ';'
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1627:7: ( (lv_children_15_0= ruleRelationDeclaration ) )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1628:1: (lv_children_15_0= ruleRelationDeclaration )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1628:1: (lv_children_15_0= ruleRelationDeclaration )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1629:3: lv_children_15_0= ruleRelationDeclaration
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getFullModelAccess().getChildrenRelationDeclarationParserRuleCall_4_2_0_0(), currentNode); 
            	    	    
            	    pushFollow(FollowSets000.FOLLOW_ruleRelationDeclaration_in_ruleFullModel2744);
            	    lv_children_15_0=ruleRelationDeclaration();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getFullModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        try {
            	    	       		add(
            	    	       			current, 
            	    	       			"children",
            	    	        		lv_children_15_0, 
            	    	        		"RelationDeclaration", 
            	    	        		currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }


            	    }

            	    match(input,12,FollowSets000.FOLLOW_12_in_ruleFullModel2754); 

            	            createLeafNode(grammarAccess.getFullModelAccess().getSemicolonKeyword_4_2_1(), null); 
            	        

            	    }


            	    }
            	    break;

            	default :
            	    break loop31;
                }
            } while (true);

            match(input,20,FollowSets000.FOLLOW_20_in_ruleFullModel2767); 

                    createLeafNode(grammarAccess.getFullModelAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleFullModel


    // $ANTLR start entryRuleGoalDeclaration
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1667:1: entryRuleGoalDeclaration returns [EObject current=null] : iv_ruleGoalDeclaration= ruleGoalDeclaration EOF ;
    public final EObject entryRuleGoalDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleGoalDeclaration = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1668:2: (iv_ruleGoalDeclaration= ruleGoalDeclaration EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1669:2: iv_ruleGoalDeclaration= ruleGoalDeclaration EOF
            {
             currentNode = createCompositeNode(grammarAccess.getGoalDeclarationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleGoalDeclaration_in_entryRuleGoalDeclaration2803);
            iv_ruleGoalDeclaration=ruleGoalDeclaration();
            _fsp--;

             current =iv_ruleGoalDeclaration; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleGoalDeclaration2813); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleGoalDeclaration


    // $ANTLR start ruleGoalDeclaration
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1676:1: ruleGoalDeclaration returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) ( ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' ) | ( ':' ( (lv_text_6_0= RULE_STRING ) ) ) )? ) ;
    public final EObject ruleGoalDeclaration() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token lv_text_3_0=null;
        Token lv_text_6_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1681:6: ( ( ( (lv_name_0_0= RULE_ID ) ) ( ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' ) | ( ':' ( (lv_text_6_0= RULE_STRING ) ) ) )? ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1682:1: ( ( (lv_name_0_0= RULE_ID ) ) ( ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' ) | ( ':' ( (lv_text_6_0= RULE_STRING ) ) ) )? )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1682:1: ( ( (lv_name_0_0= RULE_ID ) ) ( ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' ) | ( ':' ( (lv_text_6_0= RULE_STRING ) ) ) )? )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1682:2: ( (lv_name_0_0= RULE_ID ) ) ( ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' ) | ( ':' ( (lv_text_6_0= RULE_STRING ) ) ) )?
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1682:2: ( (lv_name_0_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1683:1: (lv_name_0_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1683:1: (lv_name_0_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1684:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleGoalDeclaration2855); 

            			createLeafNode(grammarAccess.getGoalDeclarationAccess().getNameIDTerminalRuleCall_0_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getGoalDeclarationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_0_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1706:2: ( ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' ) | ( ':' ( (lv_text_6_0= RULE_STRING ) ) ) )?
            int alt32=3;
            int LA32_0 = input.LA(1);

            if ( (LA32_0==19) ) {
                alt32=1;
            }
            else if ( (LA32_0==17) ) {
                alt32=2;
            }
            switch (alt32) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1706:3: ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1706:3: ( '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}' )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1706:5: '{' 'text' ( (lv_text_3_0= RULE_STRING ) ) '}'
                    {
                    match(input,19,FollowSets000.FOLLOW_19_in_ruleGoalDeclaration2872); 

                            createLeafNode(grammarAccess.getGoalDeclarationAccess().getLeftCurlyBracketKeyword_1_0_0(), null); 
                        
                    match(input,33,FollowSets000.FOLLOW_33_in_ruleGoalDeclaration2882); 

                            createLeafNode(grammarAccess.getGoalDeclarationAccess().getTextKeyword_1_0_1(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1714:1: ( (lv_text_3_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1715:1: (lv_text_3_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1715:1: (lv_text_3_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1716:3: lv_text_3_0= RULE_STRING
                    {
                    lv_text_3_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleGoalDeclaration2899); 

                    			createLeafNode(grammarAccess.getGoalDeclarationAccess().getTextSTRINGTerminalRuleCall_1_0_2_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getGoalDeclarationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_3_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,20,FollowSets000.FOLLOW_20_in_ruleGoalDeclaration2914); 

                            createLeafNode(grammarAccess.getGoalDeclarationAccess().getRightCurlyBracketKeyword_1_0_3(), null); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1743:6: ( ':' ( (lv_text_6_0= RULE_STRING ) ) )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1743:6: ( ':' ( (lv_text_6_0= RULE_STRING ) ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1743:8: ':' ( (lv_text_6_0= RULE_STRING ) )
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleGoalDeclaration2932); 

                            createLeafNode(grammarAccess.getGoalDeclarationAccess().getColonKeyword_1_1_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1747:1: ( (lv_text_6_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1748:1: (lv_text_6_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1748:1: (lv_text_6_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1749:3: lv_text_6_0= RULE_STRING
                    {
                    lv_text_6_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleGoalDeclaration2949); 

                    			createLeafNode(grammarAccess.getGoalDeclarationAccess().getTextSTRINGTerminalRuleCall_1_1_1_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getGoalDeclarationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_6_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleGoalDeclaration


    // $ANTLR start entryRuleActorDeclaration
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1779:1: entryRuleActorDeclaration returns [EObject current=null] : iv_ruleActorDeclaration= ruleActorDeclaration EOF ;
    public final EObject entryRuleActorDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActorDeclaration = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1780:2: (iv_ruleActorDeclaration= ruleActorDeclaration EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1781:2: iv_ruleActorDeclaration= ruleActorDeclaration EOF
            {
             currentNode = createCompositeNode(grammarAccess.getActorDeclarationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleActorDeclaration_in_entryRuleActorDeclaration2993);
            iv_ruleActorDeclaration=ruleActorDeclaration();
            _fsp--;

             current =iv_ruleActorDeclaration; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleActorDeclaration3003); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleActorDeclaration


    // $ANTLR start ruleActorDeclaration
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1788:1: ruleActorDeclaration returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) ( ':' ( (lv_text_2_0= RULE_STRING ) ) )? ) ;
    public final EObject ruleActorDeclaration() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token lv_text_2_0=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1793:6: ( ( ( (lv_name_0_0= RULE_ID ) ) ( ':' ( (lv_text_2_0= RULE_STRING ) ) )? ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1794:1: ( ( (lv_name_0_0= RULE_ID ) ) ( ':' ( (lv_text_2_0= RULE_STRING ) ) )? )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1794:1: ( ( (lv_name_0_0= RULE_ID ) ) ( ':' ( (lv_text_2_0= RULE_STRING ) ) )? )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1794:2: ( (lv_name_0_0= RULE_ID ) ) ( ':' ( (lv_text_2_0= RULE_STRING ) ) )?
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1794:2: ( (lv_name_0_0= RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1795:1: (lv_name_0_0= RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1795:1: (lv_name_0_0= RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1796:3: lv_name_0_0= RULE_ID
            {
            lv_name_0_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleActorDeclaration3045); 

            			createLeafNode(grammarAccess.getActorDeclarationAccess().getNameIDTerminalRuleCall_0_0(), "name"); 
            		

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getActorDeclarationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"name",
            	        		lv_name_0_0, 
            	        		"ID", 
            	        		lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1818:2: ( ':' ( (lv_text_2_0= RULE_STRING ) ) )?
            int alt33=2;
            int LA33_0 = input.LA(1);

            if ( (LA33_0==17) ) {
                alt33=1;
            }
            switch (alt33) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1818:4: ':' ( (lv_text_2_0= RULE_STRING ) )
                    {
                    match(input,17,FollowSets000.FOLLOW_17_in_ruleActorDeclaration3061); 

                            createLeafNode(grammarAccess.getActorDeclarationAccess().getColonKeyword_1_0(), null); 
                        
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1822:1: ( (lv_text_2_0= RULE_STRING ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1823:1: (lv_text_2_0= RULE_STRING )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1823:1: (lv_text_2_0= RULE_STRING )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1824:3: lv_text_2_0= RULE_STRING
                    {
                    lv_text_2_0=(Token)input.LT(1);
                    match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleActorDeclaration3078); 

                    			createLeafNode(grammarAccess.getActorDeclarationAccess().getTextSTRINGTerminalRuleCall_1_1_0(), "text"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getActorDeclarationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"text",
                    	        		lv_text_2_0, 
                    	        		"STRING", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }


                    }
                    break;

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleActorDeclaration


    // $ANTLR start entryRuleRelationDeclaration
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1854:1: entryRuleRelationDeclaration returns [EObject current=null] : iv_ruleRelationDeclaration= ruleRelationDeclaration EOF ;
    public final EObject entryRuleRelationDeclaration() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRelationDeclaration = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1855:2: (iv_ruleRelationDeclaration= ruleRelationDeclaration EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1856:2: iv_ruleRelationDeclaration= ruleRelationDeclaration EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRelationDeclarationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleRelationDeclaration_in_entryRuleRelationDeclaration3121);
            iv_ruleRelationDeclaration=ruleRelationDeclaration();
            _fsp--;

             current =iv_ruleRelationDeclaration; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRelationDeclaration3131); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRelationDeclaration


    // $ANTLR start ruleRelationDeclaration
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1863:1: ruleRelationDeclaration returns [EObject current=null] : (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation ) ;
    public final EObject ruleRelationDeclaration() throws RecognitionException {
        EObject current = null;

        EObject this_Decomposition_0 = null;

        EObject this_Delegation_1 = null;

        EObject this_OwnRelation_2 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1868:6: ( (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1869:1: (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1869:1: (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation )
            int alt34=3;
            int LA34_0 = input.LA(1);

            if ( (LA34_0==RULE_ID) ) {
                switch ( input.LA(2) ) {
                case 17:
                    {
                    int LA34_2 = input.LA(3);

                    if ( (LA34_2==RULE_ID) ) {
                        switch ( input.LA(4) ) {
                        case 36:
                            {
                            alt34=1;
                            }
                            break;
                        case 38:
                            {
                            alt34=3;
                            }
                            break;
                        case 37:
                            {
                            alt34=2;
                            }
                            break;
                        default:
                            NoViableAltException nvae =
                                new NoViableAltException("1869:1: (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation )", 34, 6, input);

                            throw nvae;
                        }

                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("1869:1: (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation )", 34, 2, input);

                        throw nvae;
                    }
                    }
                    break;
                case 36:
                    {
                    alt34=1;
                    }
                    break;
                case 38:
                    {
                    alt34=3;
                    }
                    break;
                case 37:
                    {
                    alt34=2;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("1869:1: (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation )", 34, 1, input);

                    throw nvae;
                }

            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("1869:1: (this_Decomposition_0= ruleDecomposition | this_Delegation_1= ruleDelegation | this_OwnRelation_2= ruleOwnRelation )", 34, 0, input);

                throw nvae;
            }
            switch (alt34) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1870:5: this_Decomposition_0= ruleDecomposition
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getRelationDeclarationAccess().getDecompositionParserRuleCall_0(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleDecomposition_in_ruleRelationDeclaration3178);
                    this_Decomposition_0=ruleDecomposition();
                    _fsp--;

                     
                            current = this_Decomposition_0; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 2 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1880:5: this_Delegation_1= ruleDelegation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getRelationDeclarationAccess().getDelegationParserRuleCall_1(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleDelegation_in_ruleRelationDeclaration3205);
                    this_Delegation_1=ruleDelegation();
                    _fsp--;

                     
                            current = this_Delegation_1; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;
                case 3 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1890:5: this_OwnRelation_2= ruleOwnRelation
                    {
                     
                            currentNode=createCompositeNode(grammarAccess.getRelationDeclarationAccess().getOwnRelationParserRuleCall_2(), currentNode); 
                        
                    pushFollow(FollowSets000.FOLLOW_ruleOwnRelation_in_ruleRelationDeclaration3232);
                    this_OwnRelation_2=ruleOwnRelation();
                    _fsp--;

                     
                            current = this_OwnRelation_2; 
                            currentNode = currentNode.getParent();
                        

                    }
                    break;

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRelationDeclaration


    // $ANTLR start entryRuleDecomposition
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1906:1: entryRuleDecomposition returns [EObject current=null] : iv_ruleDecomposition= ruleDecomposition EOF ;
    public final EObject entryRuleDecomposition() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDecomposition = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1907:2: (iv_ruleDecomposition= ruleDecomposition EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1908:2: iv_ruleDecomposition= ruleDecomposition EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDecompositionRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleDecomposition_in_entryRuleDecomposition3267);
            iv_ruleDecomposition=ruleDecomposition();
            _fsp--;

             current =iv_ruleDecomposition; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDecomposition3277); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDecomposition


    // $ANTLR start ruleDecomposition
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1915:1: ruleDecomposition returns [EObject current=null] : ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDECOMPOSE ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* ) ;
    public final EObject ruleDecomposition() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Enumerator lv_relType_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1920:6: ( ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDECOMPOSE ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1921:1: ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDECOMPOSE ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1921:1: ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDECOMPOSE ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1921:2: ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDECOMPOSE ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )*
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1921:2: ( ( (lv_name_0_0= RULE_ID ) ) ':' )?
            int alt35=2;
            int LA35_0 = input.LA(1);

            if ( (LA35_0==RULE_ID) ) {
                int LA35_1 = input.LA(2);

                if ( (LA35_1==17) ) {
                    alt35=1;
                }
            }
            switch (alt35) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1921:3: ( (lv_name_0_0= RULE_ID ) ) ':'
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1921:3: ( (lv_name_0_0= RULE_ID ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1922:1: (lv_name_0_0= RULE_ID )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1922:1: (lv_name_0_0= RULE_ID )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1923:3: lv_name_0_0= RULE_ID
                    {
                    lv_name_0_0=(Token)input.LT(1);
                    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDecomposition3320); 

                    			createLeafNode(grammarAccess.getDecompositionAccess().getNameIDTerminalRuleCall_0_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDecompositionRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_0_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,17,FollowSets000.FOLLOW_17_in_ruleDecomposition3335); 

                            createLeafNode(grammarAccess.getDecompositionAccess().getColonKeyword_0_1(), null); 
                        

                    }
                    break;

            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1949:3: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1950:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1950:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1951:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getDecompositionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDecomposition3355); 

            		createLeafNode(grammarAccess.getDecompositionAccess().getSourceGoalCrossReference_1_0(), "source"); 
            	

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1963:2: ( (lv_relType_3_0= ruleDECOMPOSE ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1964:1: (lv_relType_3_0= ruleDECOMPOSE )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1964:1: (lv_relType_3_0= ruleDECOMPOSE )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1965:3: lv_relType_3_0= ruleDECOMPOSE
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getDecompositionAccess().getRelTypeDECOMPOSEEnumRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleDECOMPOSE_in_ruleDecomposition3376);
            lv_relType_3_0=ruleDECOMPOSE();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getDecompositionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"relType",
            	        		lv_relType_3_0, 
            	        		"DECOMPOSE", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1987:2: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1988:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1988:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:1989:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getDecompositionRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDecomposition3394); 

            		createLeafNode(grammarAccess.getDecompositionAccess().getTargetGoalCrossReference_3_0(), "target"); 
            	

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2001:2: ( ',' ( ( RULE_ID ) ) )*
            loop36:
            do {
                int alt36=2;
                int LA36_0 = input.LA(1);

                if ( (LA36_0==27) ) {
                    int LA36_1 = input.LA(2);

                    if ( (LA36_1==RULE_ID) ) {
                        alt36=1;
                    }


                }


                switch (alt36) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2001:4: ',' ( ( RULE_ID ) )
            	    {
            	    match(input,27,FollowSets000.FOLLOW_27_in_ruleDecomposition3405); 

            	            createLeafNode(grammarAccess.getDecompositionAccess().getCommaKeyword_4_0(), null); 
            	        
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2005:1: ( ( RULE_ID ) )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2006:1: ( RULE_ID )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2006:1: ( RULE_ID )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2007:3: RULE_ID
            	    {

            	    			if (current==null) {
            	    	            current = factory.create(grammarAccess.getDecompositionRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode, current);
            	    	        }
            	            
            	    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDecomposition3423); 

            	    		createLeafNode(grammarAccess.getDecompositionAccess().getTargetGoalCrossReference_4_1_0(), "target"); 
            	    	

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop36;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDecomposition


    // $ANTLR start entryRuleOwnRelation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2027:1: entryRuleOwnRelation returns [EObject current=null] : iv_ruleOwnRelation= ruleOwnRelation EOF ;
    public final EObject entryRuleOwnRelation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleOwnRelation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2028:2: (iv_ruleOwnRelation= ruleOwnRelation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2029:2: iv_ruleOwnRelation= ruleOwnRelation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getOwnRelationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleOwnRelation_in_entryRuleOwnRelation3461);
            iv_ruleOwnRelation=ruleOwnRelation();
            _fsp--;

             current =iv_ruleOwnRelation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleOwnRelation3471); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleOwnRelation


    // $ANTLR start ruleOwnRelation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2036:1: ruleOwnRelation returns [EObject current=null] : ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleOWN ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* ) ;
    public final EObject ruleOwnRelation() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Enumerator lv_relType_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2041:6: ( ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleOWN ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2042:1: ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleOWN ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2042:1: ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleOWN ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )* )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2042:2: ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleOWN ) ) ( ( RULE_ID ) ) ( ',' ( ( RULE_ID ) ) )*
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2042:2: ( ( (lv_name_0_0= RULE_ID ) ) ':' )?
            int alt37=2;
            int LA37_0 = input.LA(1);

            if ( (LA37_0==RULE_ID) ) {
                int LA37_1 = input.LA(2);

                if ( (LA37_1==17) ) {
                    alt37=1;
                }
            }
            switch (alt37) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2042:3: ( (lv_name_0_0= RULE_ID ) ) ':'
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2042:3: ( (lv_name_0_0= RULE_ID ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2043:1: (lv_name_0_0= RULE_ID )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2043:1: (lv_name_0_0= RULE_ID )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2044:3: lv_name_0_0= RULE_ID
                    {
                    lv_name_0_0=(Token)input.LT(1);
                    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleOwnRelation3514); 

                    			createLeafNode(grammarAccess.getOwnRelationAccess().getNameIDTerminalRuleCall_0_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getOwnRelationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_0_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,17,FollowSets000.FOLLOW_17_in_ruleOwnRelation3529); 

                            createLeafNode(grammarAccess.getOwnRelationAccess().getColonKeyword_0_1(), null); 
                        

                    }
                    break;

            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2070:3: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2071:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2071:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2072:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getOwnRelationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleOwnRelation3549); 

            		createLeafNode(grammarAccess.getOwnRelationAccess().getSourceActorCrossReference_1_0(), "source"); 
            	

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2084:2: ( (lv_relType_3_0= ruleOWN ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2085:1: (lv_relType_3_0= ruleOWN )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2085:1: (lv_relType_3_0= ruleOWN )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2086:3: lv_relType_3_0= ruleOWN
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getOwnRelationAccess().getRelTypeOWNEnumRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleOWN_in_ruleOwnRelation3570);
            lv_relType_3_0=ruleOWN();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getOwnRelationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"relType",
            	        		lv_relType_3_0, 
            	        		"OWN", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2108:2: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2109:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2109:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2110:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getOwnRelationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleOwnRelation3588); 

            		createLeafNode(grammarAccess.getOwnRelationAccess().getTargetGoalCrossReference_3_0(), "target"); 
            	

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2122:2: ( ',' ( ( RULE_ID ) ) )*
            loop38:
            do {
                int alt38=2;
                int LA38_0 = input.LA(1);

                if ( (LA38_0==27) ) {
                    int LA38_1 = input.LA(2);

                    if ( (LA38_1==RULE_ID) ) {
                        alt38=1;
                    }


                }


                switch (alt38) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2122:4: ',' ( ( RULE_ID ) )
            	    {
            	    match(input,27,FollowSets000.FOLLOW_27_in_ruleOwnRelation3599); 

            	            createLeafNode(grammarAccess.getOwnRelationAccess().getCommaKeyword_4_0(), null); 
            	        
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2126:1: ( ( RULE_ID ) )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2127:1: ( RULE_ID )
            	    {
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2127:1: ( RULE_ID )
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2128:3: RULE_ID
            	    {

            	    			if (current==null) {
            	    	            current = factory.create(grammarAccess.getOwnRelationRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode, current);
            	    	        }
            	            
            	    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleOwnRelation3617); 

            	    		createLeafNode(grammarAccess.getOwnRelationAccess().getTargetGoalCrossReference_4_1_0(), "target"); 
            	    	

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop38;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleOwnRelation


    // $ANTLR start entryRuleDelegation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2148:1: entryRuleDelegation returns [EObject current=null] : iv_ruleDelegation= ruleDelegation EOF ;
    public final EObject entryRuleDelegation() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDelegation = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2149:2: (iv_ruleDelegation= ruleDelegation EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2150:2: iv_ruleDelegation= ruleDelegation EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDelegationRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleDelegation_in_entryRuleDelegation3655);
            iv_ruleDelegation=ruleDelegation();
            _fsp--;

             current =iv_ruleDelegation; 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDelegation3665); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDelegation


    // $ANTLR start ruleDelegation
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2157:1: ruleDelegation returns [EObject current=null] : ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDELEGATE ) ) ( ( RULE_ID ) ) ) ;
    public final EObject ruleDelegation() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Enumerator lv_relType_3_0 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2162:6: ( ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDELEGATE ) ) ( ( RULE_ID ) ) ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2163:1: ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDELEGATE ) ) ( ( RULE_ID ) ) )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2163:1: ( ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDELEGATE ) ) ( ( RULE_ID ) ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2163:2: ( ( (lv_name_0_0= RULE_ID ) ) ':' )? ( ( RULE_ID ) ) ( (lv_relType_3_0= ruleDELEGATE ) ) ( ( RULE_ID ) )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2163:2: ( ( (lv_name_0_0= RULE_ID ) ) ':' )?
            int alt39=2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0==RULE_ID) ) {
                int LA39_1 = input.LA(2);

                if ( (LA39_1==17) ) {
                    alt39=1;
                }
            }
            switch (alt39) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2163:3: ( (lv_name_0_0= RULE_ID ) ) ':'
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2163:3: ( (lv_name_0_0= RULE_ID ) )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2164:1: (lv_name_0_0= RULE_ID )
                    {
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2164:1: (lv_name_0_0= RULE_ID )
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2165:3: lv_name_0_0= RULE_ID
                    {
                    lv_name_0_0=(Token)input.LT(1);
                    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDelegation3708); 

                    			createLeafNode(grammarAccess.getDelegationAccess().getNameIDTerminalRuleCall_0_0_0(), "name"); 
                    		

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDelegationRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        try {
                    	       		set(
                    	       			current, 
                    	       			"name",
                    	        		lv_name_0_0, 
                    	        		"ID", 
                    	        		lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }

                    match(input,17,FollowSets000.FOLLOW_17_in_ruleDelegation3723); 

                            createLeafNode(grammarAccess.getDelegationAccess().getColonKeyword_0_1(), null); 
                        

                    }
                    break;

            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2191:3: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2192:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2192:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2193:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getDelegationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDelegation3743); 

            		createLeafNode(grammarAccess.getDelegationAccess().getSourceGoalCrossReference_1_0(), "source"); 
            	

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2205:2: ( (lv_relType_3_0= ruleDELEGATE ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2206:1: (lv_relType_3_0= ruleDELEGATE )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2206:1: (lv_relType_3_0= ruleDELEGATE )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2207:3: lv_relType_3_0= ruleDELEGATE
            {
             
            	        currentNode=createCompositeNode(grammarAccess.getDelegationAccess().getRelTypeDELEGATEEnumRuleCall_2_0(), currentNode); 
            	    
            pushFollow(FollowSets000.FOLLOW_ruleDELEGATE_in_ruleDelegation3764);
            lv_relType_3_0=ruleDELEGATE();
            _fsp--;


            	        if (current==null) {
            	            current = factory.create(grammarAccess.getDelegationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode.getParent(), current);
            	        }
            	        try {
            	       		set(
            	       			current, 
            	       			"relType",
            	        		lv_relType_3_0, 
            	        		"DELEGATE", 
            	        		currentNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	        currentNode = currentNode.getParent();
            	    

            }


            }

            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2229:2: ( ( RULE_ID ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2230:1: ( RULE_ID )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2230:1: ( RULE_ID )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2231:3: RULE_ID
            {

            			if (current==null) {
            	            current = factory.create(grammarAccess.getDelegationRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
                    
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleDelegation3782); 

            		createLeafNode(grammarAccess.getDelegationAccess().getTargetGoalCrossReference_3_0(), "target"); 
            	

            }


            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDelegation


    // $ANTLR start entryRuleQualifiedName
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2251:1: entryRuleQualifiedName returns [String current=null] : iv_ruleQualifiedName= ruleQualifiedName EOF ;
    public final String entryRuleQualifiedName() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedName = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2252:2: (iv_ruleQualifiedName= ruleQualifiedName EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2253:2: iv_ruleQualifiedName= ruleQualifiedName EOF
            {
             currentNode = createCompositeNode(grammarAccess.getQualifiedNameRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName3819);
            iv_ruleQualifiedName=ruleQualifiedName();
            _fsp--;

             current =iv_ruleQualifiedName.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleQualifiedName3830); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleQualifiedName


    // $ANTLR start ruleQualifiedName
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2260:1: ruleQualifiedName returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedName() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token this_ID_0=null;
        Token kw=null;
        Token this_ID_2=null;

         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2265:6: ( (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2266:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2266:1: (this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )* )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2266:6: this_ID_0= RULE_ID (kw= '.' this_ID_2= RULE_ID )*
            {
            this_ID_0=(Token)input.LT(1);
            match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleQualifiedName3870); 

            		current.merge(this_ID_0);
                
             
                createLeafNode(grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_0(), null); 
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2273:1: (kw= '.' this_ID_2= RULE_ID )*
            loop40:
            do {
                int alt40=2;
                int LA40_0 = input.LA(1);

                if ( (LA40_0==34) ) {
                    alt40=1;
                }


                switch (alt40) {
            	case 1 :
            	    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2274:2: kw= '.' this_ID_2= RULE_ID
            	    {
            	    kw=(Token)input.LT(1);
            	    match(input,34,FollowSets000.FOLLOW_34_in_ruleQualifiedName3889); 

            	            current.merge(kw);
            	            createLeafNode(grammarAccess.getQualifiedNameAccess().getFullStopKeyword_1_0(), null); 
            	        
            	    this_ID_2=(Token)input.LT(1);
            	    match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleQualifiedName3904); 

            	    		current.merge(this_ID_2);
            	        
            	     
            	        createLeafNode(grammarAccess.getQualifiedNameAccess().getIDTerminalRuleCall_1_1(), null); 
            	        

            	    }
            	    break;

            	default :
            	    break loop40;
                }
            } while (true);


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleQualifiedName


    // $ANTLR start entryRuleQualifiedNameWithWildCard
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2294:1: entryRuleQualifiedNameWithWildCard returns [String current=null] : iv_ruleQualifiedNameWithWildCard= ruleQualifiedNameWithWildCard EOF ;
    public final String entryRuleQualifiedNameWithWildCard() throws RecognitionException {
        String current = null;

        AntlrDatatypeRuleToken iv_ruleQualifiedNameWithWildCard = null;


        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2295:2: (iv_ruleQualifiedNameWithWildCard= ruleQualifiedNameWithWildCard EOF )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2296:2: iv_ruleQualifiedNameWithWildCard= ruleQualifiedNameWithWildCard EOF
            {
             currentNode = createCompositeNode(grammarAccess.getQualifiedNameWithWildCardRule(), currentNode); 
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedNameWithWildCard_in_entryRuleQualifiedNameWithWildCard3952);
            iv_ruleQualifiedNameWithWildCard=ruleQualifiedNameWithWildCard();
            _fsp--;

             current =iv_ruleQualifiedNameWithWildCard.getText(); 
            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleQualifiedNameWithWildCard3963); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleQualifiedNameWithWildCard


    // $ANTLR start ruleQualifiedNameWithWildCard
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2303:1: ruleQualifiedNameWithWildCard returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? ) ;
    public final AntlrDatatypeRuleToken ruleQualifiedNameWithWildCard() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();

        Token kw=null;
        AntlrDatatypeRuleToken this_QualifiedName_0 = null;


         setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2308:6: ( (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2309:1: (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2309:1: (this_QualifiedName_0= ruleQualifiedName (kw= '.*' )? )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2310:5: this_QualifiedName_0= ruleQualifiedName (kw= '.*' )?
            {
             
                    currentNode=createCompositeNode(grammarAccess.getQualifiedNameWithWildCardAccess().getQualifiedNameParserRuleCall_0(), currentNode); 
                
            pushFollow(FollowSets000.FOLLOW_ruleQualifiedName_in_ruleQualifiedNameWithWildCard4010);
            this_QualifiedName_0=ruleQualifiedName();
            _fsp--;


            		current.merge(this_QualifiedName_0);
                
             
                    currentNode = currentNode.getParent();
                
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2320:1: (kw= '.*' )?
            int alt41=2;
            int LA41_0 = input.LA(1);

            if ( (LA41_0==35) ) {
                alt41=1;
            }
            switch (alt41) {
                case 1 :
                    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2321:2: kw= '.*'
                    {
                    kw=(Token)input.LT(1);
                    match(input,35,FollowSets000.FOLLOW_35_in_ruleQualifiedNameWithWildCard4029); 

                            current.merge(kw);
                            createLeafNode(grammarAccess.getQualifiedNameWithWildCardAccess().getFullStopAsteriskKeyword_1(), null); 
                        

                    }
                    break;

            }


            }


            }

             resetLookahead(); 
            	    lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleQualifiedNameWithWildCard


    // $ANTLR start ruleDECOMPOSE
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2334:1: ruleDECOMPOSE returns [Enumerator current=null] : ( ':=' ) ;
    public final Enumerator ruleDECOMPOSE() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2338:6: ( ( ':=' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2339:1: ( ':=' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2339:1: ( ':=' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2339:3: ':='
            {
            match(input,36,FollowSets000.FOLLOW_36_in_ruleDECOMPOSE4082); 

                    current = grammarAccess.getDECOMPOSEAccess().getDECOMPOSEEnumLiteralDeclaration().getEnumLiteral().getInstance();
                    createLeafNode(grammarAccess.getDECOMPOSEAccess().getDECOMPOSEEnumLiteralDeclaration(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDECOMPOSE


    // $ANTLR start ruleDELEGATE
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2349:1: ruleDELEGATE returns [Enumerator current=null] : ( '->' ) ;
    public final Enumerator ruleDELEGATE() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2353:6: ( ( '->' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2354:1: ( '->' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2354:1: ( '->' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2354:3: '->'
            {
            match(input,37,FollowSets000.FOLLOW_37_in_ruleDELEGATE4123); 

                    current = grammarAccess.getDELEGATEAccess().getDELEGATEEnumLiteralDeclaration().getEnumLiteral().getInstance();
                    createLeafNode(grammarAccess.getDELEGATEAccess().getDELEGATEEnumLiteralDeclaration(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDELEGATE


    // $ANTLR start ruleOWN
    // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2364:1: ruleOWN returns [Enumerator current=null] : ( 'owns' ) ;
    public final Enumerator ruleOWN() throws RecognitionException {
        Enumerator current = null;

         setCurrentLookahead(); resetLookahead(); 
        try {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2368:6: ( ( 'owns' ) )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2369:1: ( 'owns' )
            {
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2369:1: ( 'owns' )
            // ../ms.unicorn.xtext.dsl.eistar/src-gen/ms/unicorn/parser/antlr/internal/InternalEIstar.g:2369:3: 'owns'
            {
            match(input,38,FollowSets000.FOLLOW_38_in_ruleOWN4164); 

                    current = grammarAccess.getOWNAccess().getOWNEnumLiteralDeclaration().getEnumLiteral().getInstance();
                    createLeafNode(grammarAccess.getOWNAccess().getOWNEnumLiteralDeclaration(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleOWN


 

    
    private static class FollowSets000 {
        public static final BitSet FOLLOW_ruleSituation_in_entryRuleSituation75 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleSituation85 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_11_in_ruleSituation120 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_ruleSituation141 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleSituation151 = new BitSet(new long[]{0x000000008001E002L});
        public static final BitSet FOLLOW_ruleIncludeSituation_in_ruleSituation172 = new BitSet(new long[]{0x000000008001E002L});
        public static final BitSet FOLLOW_ruleImportNamespace_in_ruleSituation194 = new BitSet(new long[]{0x000000008001C002L});
        public static final BitSet FOLLOW_ruleModel_in_ruleSituation216 = new BitSet(new long[]{0x0000000080018002L});
        public static final BitSet FOLLOW_ruleModel_in_entryRuleModel253 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleModel263 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRequirementModel_in_ruleModel310 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionModel_in_ruleModel337 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleIncludeSituation_in_entryRuleIncludeSituation372 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleIncludeSituation382 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_13_in_ruleIncludeSituation417 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleIncludeSituation434 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleIncludeSituation449 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleImportNamespace_in_entryRuleImportNamespace485 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleImportNamespace495 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_14_in_ruleImportNamespace530 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleQualifiedNameWithWildCard_in_ruleImportNamespace551 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleImportNamespace561 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionModel_in_entryRuleEvolutionModel597 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEvolutionModel607 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_15_in_ruleEvolutionModel642 = new BitSet(new long[]{0x0000000000010000L});
        public static final BitSet FOLLOW_16_in_ruleEvolutionModel652 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEvolutionModel669 = new BitSet(new long[]{0x0000000000060000L});
        public static final BitSet FOLLOW_17_in_ruleEvolutionModel685 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleEvolutionModel702 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_18_in_ruleEvolutionModel719 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEvolutionModel737 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleEvolutionModel747 = new BitSet(new long[]{0x0000000000300000L});
        public static final BitSet FOLLOW_ruleEvolutionRule_in_ruleEvolutionModel768 = new BitSet(new long[]{0x0000000000300000L});
        public static final BitSet FOLLOW_20_in_ruleEvolutionModel779 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionRule_in_entryRuleEvolutionRule815 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEvolutionRule825 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_21_in_ruleEvolutionRule860 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEvolutionRule877 = new BitSet(new long[]{0x0000000000060000L});
        public static final BitSet FOLLOW_17_in_ruleEvolutionRule893 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleEvolutionRule910 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_18_in_ruleEvolutionRule927 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_ruleEvolutionRule950 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleEvolutionRule960 = new BitSet(new long[]{0x0000000000504000L});
        public static final BitSet FOLLOW_ruleImportNamespace_in_ruleEvolutionRule981 = new BitSet(new long[]{0x0000000000504000L});
        public static final BitSet FOLLOW_ruleEvolutionBranch_in_ruleEvolutionRule1003 = new BitSet(new long[]{0x0000000000500000L});
        public static final BitSet FOLLOW_20_in_ruleEvolutionRule1014 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionBranch_in_entryRuleEvolutionBranch1050 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEvolutionBranch1060 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_22_in_ruleEvolutionBranch1095 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleEvolutionBranch1112 = new BitSet(new long[]{0x0000000000800000L});
        public static final BitSet FOLLOW_23_in_ruleEvolutionBranch1127 = new BitSet(new long[]{0x0000000000000040L});
        public static final BitSet FOLLOW_RULE_INT_in_ruleEvolutionBranch1144 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleEvolutionBranch1159 = new BitSet(new long[]{0x0000000063100000L});
        public static final BitSet FOLLOW_ruleEvolutionOperation_in_ruleEvolutionBranch1180 = new BitSet(new long[]{0x0000000063100000L});
        public static final BitSet FOLLOW_20_in_ruleEvolutionBranch1191 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionOperation_in_entryRuleEvolutionOperation1227 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEvolutionOperation1237 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionAddOperation_in_ruleEvolutionOperation1285 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_ruleEvolutionRemoveOperation_in_ruleEvolutionOperation1312 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleEvolutionOperation1322 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleEvolutionAddOperation_in_entryRuleEvolutionAddOperation1358 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEvolutionAddOperation1368 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_24_in_ruleEvolutionAddOperation1404 = new BitSet(new long[]{0x0000000014000020L});
        public static final BitSet FOLLOW_25_in_ruleEvolutionAddOperation1420 = new BitSet(new long[]{0x0000000014000020L});
        public static final BitSet FOLLOW_26_in_ruleEvolutionAddOperation1433 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleActorDeclaration_in_ruleEvolutionAddOperation1454 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_27_in_ruleEvolutionAddOperation1465 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleActorDeclaration_in_ruleEvolutionAddOperation1486 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_28_in_ruleEvolutionAddOperation1506 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleGoalDeclaration_in_ruleEvolutionAddOperation1527 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_27_in_ruleEvolutionAddOperation1538 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleGoalDeclaration_in_ruleEvolutionAddOperation1559 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleRelationDeclaration_in_ruleEvolutionAddOperation1590 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_27_in_ruleEvolutionAddOperation1601 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleRelationDeclaration_in_ruleEvolutionAddOperation1622 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleEvolutionRemoveOperation_in_entryRuleEvolutionRemoveOperation1662 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleEvolutionRemoveOperation1672 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_29_in_ruleEvolutionRemoveOperation1708 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_30_in_ruleEvolutionRemoveOperation1724 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_ruleEvolutionRemoveOperation1749 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleRelationDeclaration_in_ruleEvolutionRemoveOperation1776 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_27_in_ruleEvolutionRemoveOperation1788 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_ruleEvolutionRemoveOperation1812 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleRelationDeclaration_in_ruleEvolutionRemoveOperation1839 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleRequirementModel_in_entryRuleRequirementModel1878 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleRequirementModel1888 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleFullModel_in_ruleRequirementModel1935 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleSubModel_in_ruleRequirementModel1962 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleSubModel_in_entryRuleSubModel1997 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleSubModel2007 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_31_in_ruleSubModel2042 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleSubModel2059 = new BitSet(new long[]{0x0000000000060000L});
        public static final BitSet FOLLOW_17_in_ruleSubModel2075 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleSubModel2092 = new BitSet(new long[]{0x0000000000040000L});
        public static final BitSet FOLLOW_18_in_ruleSubModel2109 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleSubModel2127 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleSubModel2137 = new BitSet(new long[]{0x0000000000106000L});
        public static final BitSet FOLLOW_ruleImportNamespace_in_ruleSubModel2158 = new BitSet(new long[]{0x0000000000106000L});
        public static final BitSet FOLLOW_13_in_ruleSubModel2170 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleSubModelInclusion_in_ruleSubModel2191 = new BitSet(new long[]{0x0000000008001000L});
        public static final BitSet FOLLOW_27_in_ruleSubModel2202 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleSubModelInclusion_in_ruleSubModel2223 = new BitSet(new long[]{0x0000000008001000L});
        public static final BitSet FOLLOW_12_in_ruleSubModel2235 = new BitSet(new long[]{0x0000000000102000L});
        public static final BitSet FOLLOW_20_in_ruleSubModel2247 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleSubModelInclusion_in_entryRuleSubModelInclusion2283 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleSubModelInclusion2293 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_ruleSubModelInclusion2341 = new BitSet(new long[]{0x0000000102000002L});
        public static final BitSet FOLLOW_32_in_ruleSubModelInclusion2361 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_25_in_ruleSubModelInclusion2390 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleFullModel_in_entryRuleFullModel2443 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleFullModel2453 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_16_in_ruleFullModel2488 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleFullModel2505 = new BitSet(new long[]{0x00000000000A0000L});
        public static final BitSet FOLLOW_17_in_ruleFullModel2521 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleFullModel2538 = new BitSet(new long[]{0x0000000000080000L});
        public static final BitSet FOLLOW_19_in_ruleFullModel2555 = new BitSet(new long[]{0x0000000014100020L});
        public static final BitSet FOLLOW_26_in_ruleFullModel2567 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleActorDeclaration_in_ruleFullModel2588 = new BitSet(new long[]{0x0000000008001000L});
        public static final BitSet FOLLOW_27_in_ruleFullModel2599 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleActorDeclaration_in_ruleFullModel2620 = new BitSet(new long[]{0x0000000008001000L});
        public static final BitSet FOLLOW_12_in_ruleFullModel2632 = new BitSet(new long[]{0x0000000014100020L});
        public static final BitSet FOLLOW_28_in_ruleFullModel2650 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleGoalDeclaration_in_ruleFullModel2671 = new BitSet(new long[]{0x0000000008001000L});
        public static final BitSet FOLLOW_27_in_ruleFullModel2682 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_ruleGoalDeclaration_in_ruleFullModel2703 = new BitSet(new long[]{0x0000000008001000L});
        public static final BitSet FOLLOW_12_in_ruleFullModel2715 = new BitSet(new long[]{0x0000000014100020L});
        public static final BitSet FOLLOW_ruleRelationDeclaration_in_ruleFullModel2744 = new BitSet(new long[]{0x0000000000001000L});
        public static final BitSet FOLLOW_12_in_ruleFullModel2754 = new BitSet(new long[]{0x0000000014100020L});
        public static final BitSet FOLLOW_20_in_ruleFullModel2767 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleGoalDeclaration_in_entryRuleGoalDeclaration2803 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleGoalDeclaration2813 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleGoalDeclaration2855 = new BitSet(new long[]{0x00000000000A0002L});
        public static final BitSet FOLLOW_19_in_ruleGoalDeclaration2872 = new BitSet(new long[]{0x0000000200000000L});
        public static final BitSet FOLLOW_33_in_ruleGoalDeclaration2882 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleGoalDeclaration2899 = new BitSet(new long[]{0x0000000000100000L});
        public static final BitSet FOLLOW_20_in_ruleGoalDeclaration2914 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_17_in_ruleGoalDeclaration2932 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleGoalDeclaration2949 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleActorDeclaration_in_entryRuleActorDeclaration2993 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleActorDeclaration3003 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleActorDeclaration3045 = new BitSet(new long[]{0x0000000000020002L});
        public static final BitSet FOLLOW_17_in_ruleActorDeclaration3061 = new BitSet(new long[]{0x0000000000000010L});
        public static final BitSet FOLLOW_RULE_STRING_in_ruleActorDeclaration3078 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleRelationDeclaration_in_entryRuleRelationDeclaration3121 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleRelationDeclaration3131 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleDecomposition_in_ruleRelationDeclaration3178 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleDelegation_in_ruleRelationDeclaration3205 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleOwnRelation_in_ruleRelationDeclaration3232 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleDecomposition_in_entryRuleDecomposition3267 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleDecomposition3277 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDecomposition3320 = new BitSet(new long[]{0x0000000000020000L});
        public static final BitSet FOLLOW_17_in_ruleDecomposition3335 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDecomposition3355 = new BitSet(new long[]{0x0000001000000000L});
        public static final BitSet FOLLOW_ruleDECOMPOSE_in_ruleDecomposition3376 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDecomposition3394 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_27_in_ruleDecomposition3405 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDecomposition3423 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleOwnRelation_in_entryRuleOwnRelation3461 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleOwnRelation3471 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleOwnRelation3514 = new BitSet(new long[]{0x0000000000020000L});
        public static final BitSet FOLLOW_17_in_ruleOwnRelation3529 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleOwnRelation3549 = new BitSet(new long[]{0x0000004000000000L});
        public static final BitSet FOLLOW_ruleOWN_in_ruleOwnRelation3570 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleOwnRelation3588 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_27_in_ruleOwnRelation3599 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleOwnRelation3617 = new BitSet(new long[]{0x0000000008000002L});
        public static final BitSet FOLLOW_ruleDelegation_in_entryRuleDelegation3655 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleDelegation3665 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDelegation3708 = new BitSet(new long[]{0x0000000000020000L});
        public static final BitSet FOLLOW_17_in_ruleDelegation3723 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDelegation3743 = new BitSet(new long[]{0x0000002000000000L});
        public static final BitSet FOLLOW_ruleDELEGATE_in_ruleDelegation3764 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleDelegation3782 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_entryRuleQualifiedName3819 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedName3830 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleQualifiedName3870 = new BitSet(new long[]{0x0000000400000002L});
        public static final BitSet FOLLOW_34_in_ruleQualifiedName3889 = new BitSet(new long[]{0x0000000000000020L});
        public static final BitSet FOLLOW_RULE_ID_in_ruleQualifiedName3904 = new BitSet(new long[]{0x0000000400000002L});
        public static final BitSet FOLLOW_ruleQualifiedNameWithWildCard_in_entryRuleQualifiedNameWithWildCard3952 = new BitSet(new long[]{0x0000000000000000L});
        public static final BitSet FOLLOW_EOF_in_entryRuleQualifiedNameWithWildCard3963 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_ruleQualifiedName_in_ruleQualifiedNameWithWildCard4010 = new BitSet(new long[]{0x0000000800000002L});
        public static final BitSet FOLLOW_35_in_ruleQualifiedNameWithWildCard4029 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_36_in_ruleDECOMPOSE4082 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_37_in_ruleDELEGATE4123 = new BitSet(new long[]{0x0000000000000002L});
        public static final BitSet FOLLOW_38_in_ruleOWN4164 = new BitSet(new long[]{0x0000000000000002L});
    }


}